BIGENDIAN
Mark J. Lilback
mark at lilback.com
Wed Jul 11 17:46:09 EDT 2001
At 4:14 PM -0400 7/11/01, Brian Bruns wrote:
>Just to be plain about this, the server does the conversion. Most
>protocols in this situation rely on the client to make the switch, or just
>agree on network order (which means two conversion for little endian to
>little endian comm).
>
For user data, or for all network traffic?
I've been lazy about submitting patches lately, but I had to add the
ifdef below to token.c fix a value that wasn't being properly
converted when talking to SQL Server 7:
static int tds_process_msg(TDSSOCKET *tds,int marker)
{
int rc;
int len;
int len_msg;
int len_svr;
int len_sqlstate;
/* packet length */
len = tds_get_smallint(tds);
/* message number */
rc = tds_get_int(tds);
#ifdef WORDS_BIGENDIAN
rc = ByteSwap32(rc);
#endif
tds->msg_info->msg_number = rc;
I also added the following to my copy of tdsutil.h to help with this
and a couple of other byte swaps:
#define ByteSwap16(value) \
(((((unsigned short)value)<<8) & 0xFF00) | \
((((unsigned short)value)>>8) & 0x00FF))
#define ByteSwap32(value) \
(((((unsigned long)value)<<24) & 0xFF000000) | \
((((unsigned long)value)<< 8) & 0x00FF0000) | \
((((unsigned long)value)>> 8) & 0x0000FF00) | \
((((unsigned long)value)>>24) & 0x000000FF))
--
__________________________________________________________________________
"The best assumption to have
Mark J. Lilback is that any commonly held
<mark at lilback.com> belief is wrong." -- Ken Olsen,
http://www.lilback.com/ founder, Digital Equip. Corp.
More information about the FreeTDS
mailing list