Skip to Content.
Sympa Menu

freetds - Re: little endian emulation (Was: BIGENDIAN)

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: "Paul Schaap" <paul.schaap AT dingoblue.com.au>
  • To: freetds AT franklin.oit.unc.edu
  • Subject: Re: little endian emulation (Was: BIGENDIAN)
  • Date: Thu, 12 Jul 2001 20:23:08 -0400


Brian,

> I've added a config option 'emulate little endian' (boolean option,
> accepts yes/on, on/off, true/false or 1/0) for the freetds.conf
> file. Using TDS 7 will automatically cause this to be set.

I recompiled after altering the source as it wouldn't compile, are my
changes in line with what was meant ? :-
diff -urN freetds/src/tds/login.c freetdsfix/src/tds/login.c
--- freetds/src/tds/login.c Fri Jul 13 08:29:10 2001
+++ freetdsfix/src/tds/login.c Sat Jul 14 00:46:52 2001
@@ -187,8 +187,8 @@
retval = 0;
retval = select(tds->s + 1, NULL, &fds, NULL,
&selecttimeout);
/* patch from Kostya Ivanov <kostya AT warmcat.excom.spb.su> */
- if (retcode < 0 && errno == EINTR)
- retcode = 0;
+ if (retval < 0 && errno == EINTR)
+ retval = 0;
/* end patch */

now = time (NULL);
diff -urN freetds/src/tds/token.c freetdsfix/src/tds/token.c
--- freetds/src/tds/token.c Fri Jul 13 08:29:11 2001
+++ freetdsfix/src/tds/token.c Fri Jul 13 23:57:26 2001
@@ -923,11 +923,11 @@
}
if (tds->emul_little_endian) {
switch(curcol->column_type) {
- case SYBINT:
- (*(TDS_INT *)dest) =
TDS_BYTE_SWAP32(*(TDS_INT *)dest)
+ case SYBINT4:
+ (*(TDS_INT *)dest) =
TDS_BYTE_SWAP32(*(TDS_INT *)dest);
break;
- case SYBSMALLINT:
- (*(TDS_SMALLINT *)dest) =
TDS_BYTE_SWAP16(*(TDS_SMALLINT *)dest)
+ case SYBINT2:
+ (*(TDS_SMALLINT *)dest) =
TDS_BYTE_SWAP16(*(TDS_SMALLINT *)dest);
break;
}
}

I then compiled and with TDSVER unset it did 4.2 calls and got the correct
values. With TDSVER=70 it got wrong values, should have been 85114 but got
2051801344. (I'm not using a freetds.conf at all, right?)



>
> Theoretically this will allow big endian clients to appear to the server
> as little endian, thus putting an end to the perpetual stream of microsoft
> bugs affecting big end clients.

:-( darn they make your life interesting.

>
> It's not complete yet, but Paul if you can test TDS 7 on Linux PPC, int
> and smallint types *should* return correctly now. Let me know.

Are you Sure you don't want an account on my external machine to help make
the test cycle shorter, I have even a simple script to
cvs->recompile->install in one go to make it easy.


>
> Brian
>
> On Thu, 12 Jul 2001, Mark J. Lilback wrote:

Mark, thanks for your input ! Your efforts with SQL on Mac are legenedary,
Respect !

>
> > At 7:13 AM -0400 7/12/01, Brian Bruns wrote:
> > >Mark,
> > >
> > >Is this limited to an MS-SQL server? It seems to be the date problem all
> > >over again. I'm thinking that we will support a 'emulate little endian'
> > >mode for big end machines that will be used with TDS 7 and for big end
> > >machines connecting to broken versions of SQL Server. Which version is
> > >the server that exhibits this behaviour?
> >
> > This is with SQL Server 7, pre SP3. I've conditionalized my code so
> > that once a connection is open, I query the server to get what
> > version it is("master.dbo.xp_msver ProductVersion"). If it is less
> > than 961, I set dbproc->tds_socket->broken_dates to 1, otherwise i
> > set it to 0. (Since SP3 fixes the bigendian date problem.)
> >
> > I'm compiling freetds into a plugin for MacSQL Monitor, a generic
> > database tool. Because I need a lot of specific data not provided by
> > any of the apis, the plugin is hard-coded for SQL Server only. That's
> > all I've tested against, too.
> >
> > For this patch, it might be possible to detect if it is necessary.
> > It's been a while since I was debugging this, but I believe you'll
> > get a completely impossible message code if the data isn't swapped
> > properly (I think it is negative, but I'd have to check). The test
> > could be if bigendian and if (rc < 0).
> >
> >
> >

CHEERS
Poorly




Archive powered by MHonArc 2.6.24.

Top of Page