Conversion problem with unsigned long in psqlodbc-7.3.2

From: "Ruud Overeem" <overeem(at)astron(dot)nl>
To: <pgsql-odbc(at)postgresql(dot)org>
Cc: "Ger van Diepen" <diepen(at)astron(dot)nl>, "Marcel Loose" <loose(at)astron(dot)nl>
Subject: Conversion problem with unsigned long in psqlodbc-7.3.2
Date: 2003-12-03 14:31:53
Message-ID: sfce020c.021@server7.nfra.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

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.

With kind Regards,

Ruud Overeem
Astron

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Sezmillenium 2003-12-04 05:49:32 access and postgresql
Previous Message Cristian Custodio 2003-12-03 11:09:55 Re: Character invalid saving memo with UpdateSQL