[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