Problem with using SOCK_put_int method PGAPI_PutData

Problem with using SOCK_put_int method PGAPI_PutData

am 17.09.2008 12:23:47 von Marcin Ligorowski

Hi,
I%u2019ve detected problem with using psqlodbc driver on Sun Sparc Solaris =
platform.=20
An error occurs when Sparc converts unsigned short to unsigned int and back=
to unsigned short.
With default implementation 00 00 01 02 is converted to 00 00 (last two byt=
es are skipped), but it should be converted to 01 and 02.
Problem occurs every time when through method SOCK_put_int two bytes intege=
r was transferred and doesn%u2019t allow using PGAPI_PutData (odbc_lo_write=
) to put large objects to database.

To resolve described problem I%u2019ve attached patch bellow.

Regards
Marcin

--- 769,793 ----
void=20
SOCK_put_int(SocketClass *self, int value, short len)
{
if (!self)
return;
switch (len)
{
case 2:
+ {
+ unsigned short rv;
rv =3D self->reverse ? value : htons((unsigned short) value);
SOCK_put_n_char(self, (char *) &rv, 2);
return;
+ }

case 4:
+ {
+ unsigned int rv;
rv =3D self->reverse ? value : htonl((unsigned int) value);
SOCK_put_n_char(self, (char *) &rv, 4);
return;
+ }

default:
SOCK_set_error(self, SOCKET_PUT_INT_WRONG_LENGTH, "Cannot write =
ints of that length");




------------------------------------------------------------ ----------
Dzwon taniej na zagraniczne komorki!
Sprawdz >> http://link.interia.pl/f1f0e


--=20
Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-odbc