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
