Problem with using SOCK_put_int method PGAPI_PutData

Hi,
I%u2019ve detected problem with using psqlodbc driver on Sun Sparc Solaris =
platform.
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
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


--
Sent via pgsql-odbc mailing list (pgsql-odbc [at] postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-odbc
Marcin Ligorowski [ Mi, 17 September 2008 12:23 ] [ ID #1969240 ]
Datenbanken » gmane.comp.db.postgresql.odbc » Problem with using SOCK_put_int method PGAPI_PutData

Vorheriges Thema: compiling odbc
Nächstes Thema: psqlODBC and IPv6