aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-03-25 19:30:28 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-03-25 19:30:28 +0000
commit1ed61b3a9c4b87e9cf7d50eeeb1d1de92d718c93 (patch)
tree954d1ead1643e2c33af23bdba37c0ff30f8363e9
parent39ceedf5e04f131af8432ecc7c3e3503b560203b (diff)
downloadpostgresql-1ed61b3a9c4b87e9cf7d50eeeb1d1de92d718c93.tar.gz
postgresql-1ed61b3a9c4b87e9cf7d50eeeb1d1de92d718c93.zip
Fix unportable assumptions about alignment of local char[n] variables.
-rw-r--r--src/interfaces/odbc/socket.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/interfaces/odbc/socket.c b/src/interfaces/odbc/socket.c
index c4d0a1bec88..f8783197ec9 100644
--- a/src/interfaces/odbc/socket.c
+++ b/src/interfaces/odbc/socket.c
@@ -227,23 +227,29 @@ SOCK_put_string(SocketClass *self, char *string)
int
SOCK_get_int(SocketClass *self, short len)
{
- char buf[4];
-
switch (len)
{
case 2:
- SOCK_get_n_char(self, buf, len);
+ {
+ unsigned short buf;
+
+ SOCK_get_n_char(self, (char *) &buf, len);
if (self->reverse)
- return *((unsigned short *) buf);
+ return buf;
else
- return ntohs(*((unsigned short *) buf));
+ return ntohs(buf);
+ }
case 4:
- SOCK_get_n_char(self, buf, len);
+ {
+ unsigned int buf;
+
+ SOCK_get_n_char(self, (char *) &buf, len);
if (self->reverse)
- return *((unsigned int *) buf);
+ return buf;
else
- return ntohl(*((unsigned int *) buf));
+ return ntohl(buf);
+ }
default:
self->errornumber = SOCKET_GET_INT_WRONG_LENGTH;