Kelly Burkhart <kelly@kkcsm.net> writes:
> Replying to my own message...
>
> Kelly Burkhart wrote:
> > Greetings,
> > I am having a problem in running some code in 64 bit unix. I'm
> > running unixODBC and psqlodbc-08.00.0005 on SuSE 9.1 x86-64.
> > If I bind a 32 bit integer using SQL_INTEGER/SQL_C_LONG and pass a
> > value of -1, the insert fails with an 'integer out of range' error.
> > The reason this happens is the sprintf near line 2658 of convert.c.
> > case SQL_C_SLONG:
> > case SQL_C_LONG:
> > sprintf(param_string, "%ld",
> > *((SDWORD *) buffer));
> > break;
>
> It appears that SQL_C_LONG does correspond to a 32-bit integer and not
> the native long.
>
> I'm attaching a patch which fixes this, and some other questionable
> sprintf format strings in convert.c.
Just a note on this. There are already standardized format string
defines (when including inttypes.h) for different sizes:
PRId8, PRId16, PRId32, PRId64, PRIu8, PRIu16, PRIu32, PRIu64, ...
It may be better to use those. However, I don't know if they are
available in Windows.
Greetings,
Tomas