Re: Conversion problem with unsigned long in psqlodbc-7.3.2 - Mailing list pgsql-odbc

From Hiroshi Inoue
Subject Re: Conversion problem with unsigned long in psqlodbc-7.3.2
Date
Msg-id 001601c3c63e$3d465f80$3d283ddb@PbgX
Whole thread Raw
In response to Conversion problem with unsigned long in psqlodbc-7.3.2  ("Ruud Overeem" <overeem@astron.nl>)
List pgsql-odbc
> -----Original Message-----
> From: Ruud Overeem
>
> Hi,
>
> We just installed version 7.3.2 of the postgres ODBC driver
> on a RedHat
> 9.0 system. When testing the limits all the variable-types it appeared
> that unsigned long values are stored correct in the database
> but we they
> are read back we hit the LONG_MAX range.
>
> E.g. assign the value 2345678901 to an unsigned long, write
> that to the
> database and read it back. The database contains 2345678901 but the
> unsigned long variable is set to LONG_MAX (2147483647).
>
> Digging into the sources I think I found the problem. In convert.c at
> line 1184 the code says:
> case SQL_C_ULONG:
>     len = 4;
>     if (bind_size > 0)
>         *((UDWORD *) rgbValueBindRow) = atol(neut_str);
>     else
>         *((UDWORD *) rgbValue + bind_row) = atol(neut_str);
>     break;
>
> The function atol only works for signed long integers. When
> you replace
> 'atol(neut_str)' with 'strtoul(neut_str, 0 , 10)' it works fine.

I would take care of it.
Thanks.

Hiroshi Inoue


pgsql-odbc by date:

Previous
From: "Ropel"
Date:
Subject: Re: get last oid
Next
From: "Hiroshi Inoue"
Date:
Subject: Re: Bug correction