[freetds] CS_INT size bug

entropy at freetds.org entropy at freetds.org
Sun Sep 3 16:42:12 EDT 2006


Norbert Sendetzky wrote:

> I'm using a standard 32bit x86 machine.
> 
> The problem I'm facing are lots of warnings when compiling the sybase backend 
> of my library (OpenDBX, http://www.linuxnetworks.de/opendbx/) against FreeTDS 
> instead of the Sybase ctlib.
> 
> In Sybase' ctlib, CS_INT is defined as "long" and as "int" in FreeTDS which is 
> problematic when using printf() functions. This is because of the different 
> expectations gcc/printf have when handling "%d" and "%ld" modifiers.

The problem is that your code is making assumptions about what type a 
CS_INT is.  If it were reasonable for your code to do that, then there 
would be no such thing as a CS_INT, and instead it would just be "int" 
or "long".

The most portable thing your code can do in this case is explicitly cast 
to a type, then use the printf(3) format for that type.

CS_INT foo;
...
printf("%ld\n", (long) foo);

That should compile without warnings and execute properly, using FreeTDS 
or Sybase headers, on any 32 or 64 bit platform.

-- 
Cheers,
entropy



More information about the FreeTDS mailing list