Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Replace most usages of ntoh[ls] and hton[sl] with pg_bswap.h.
authorAndres Freund <andres@anarazel.de>
Sun, 1 Oct 2017 22:36:14 +0000 (15:36 -0700)
committerAndres Freund <andres@anarazel.de>
Sun, 1 Oct 2017 22:36:14 +0000 (15:36 -0700)
All postgres internal usages are replaced, it's just libpq example
usages that haven't been converted. External users of libpq can't
generally rely on including postgres internal headers.

Note that this includes replacing open-coded byte swapping of 64bit
integers (using two 32 bit swaps) with a single 64bit swap.

Where it looked applicable, I have removed netinet/in.h and
arpa/inet.h usage, which previously provided the relevant
functionality. It's perfectly possible that I missed other reasons for
including those, the buildfarm will tell.

Author: Andres Freund
Discussion: https://postgr.es/m/20170927172019.gheidqy6xvlxb325@alap3.anarazel.de

20 files changed:
contrib/pgcrypto/crypt-des.c
contrib/uuid-ossp/uuid-ossp.c
src/backend/commands/copy.c
src/backend/libpq/auth.c
src/backend/libpq/ifaddr.c
src/backend/libpq/pqcomm.c
src/backend/libpq/pqformat.c
src/backend/postmaster/postmaster.c
src/backend/tcop/fastpath.c
src/bin/pg_basebackup/streamutil.c
src/bin/pg_dump/parallel.c
src/bin/pg_rewind/libpq_fetch.c
src/common/scram-common.c
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-lobj.c
src/interfaces/libpq/fe-misc.c
src/interfaces/libpq/fe-protocol2.c
src/interfaces/libpq/fe-protocol3.c
src/port/getaddrinfo.c
src/port/inet_aton.c

index ee3a0f216965bfded0a303d21b5a378ff272039b..ed07fc4606402b9eb01b78ae817b4099a8cec4cb 100644 (file)
 
 #include "postgres.h"
 #include "miscadmin.h"
+#include "port/pg_bswap.h"
 
 #include "px-crypt.h"
 
-/* for ntohl/htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 #define _PASSWORD_EFMT1 '_'
 
 static const char _crypt_a64[] =
@@ -408,8 +405,8 @@ des_setkey(const char *key)
    if (!des_initialised)
        des_init();
 
-   rawkey0 = ntohl(*(const uint32 *) key);
-   rawkey1 = ntohl(*(const uint32 *) (key + 4));
+   rawkey0 = pg_ntoh32(*(const uint32 *) key);
+   rawkey1 = pg_ntoh32(*(const uint32 *) (key + 4));
 
    if ((rawkey0 | rawkey1)
        && rawkey0 == old_rawkey0
@@ -634,15 +631,15 @@ des_cipher(const char *in, char *out, long salt, int count)
    /* copy data to avoid assuming input is word-aligned */
    memcpy(buffer, in, sizeof(buffer));
 
-   rawl = ntohl(buffer[0]);
-   rawr = ntohl(buffer[1]);
+   rawl = pg_ntoh32(buffer[0]);
+   rawr = pg_ntoh32(buffer[1]);
 
    retval = do_des(rawl, rawr, &l_out, &r_out, count);
    if (retval)
        return retval;
 
-   buffer[0] = htonl(l_out);
-   buffer[1] = htonl(r_out);
+   buffer[0] = pg_hton32(l_out);
+   buffer[1] = pg_hton32(r_out);
 
    /* copy data to avoid assuming output is word-aligned */
    memcpy(out, buffer, sizeof(buffer));
index 55bc60941588f80227e6249407a1379da184ada4..fce4bc9140bdb19bc9a2a8b1e46de84d63c41050 100644 (file)
 #include "postgres.h"
 
 #include "fmgr.h"
+#include "port/pg_bswap.h"
 #include "utils/builtins.h"
 #include "utils/uuid.h"
 
-/* for ntohl/htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 /*
  * It's possible that there's more than one uuid.h header file present.
  * We expect configure to set the HAVE_ symbol for only the one we want.
@@ -90,16 +87,16 @@ typedef struct
 
 #define UUID_TO_NETWORK(uu) \
 do { \
-   uu.time_low = htonl(uu.time_low); \
-   uu.time_mid = htons(uu.time_mid); \
-   uu.time_hi_and_version = htons(uu.time_hi_and_version); \
+   uu.time_low = pg_hton32(uu.time_low); \
+   uu.time_mid = pg_hton16(uu.time_mid); \
+   uu.time_hi_and_version = pg_hton16(uu.time_hi_and_version); \
 } while (0)
 
 #define UUID_TO_LOCAL(uu) \
 do { \
-   uu.time_low = ntohl(uu.time_low); \
-   uu.time_mid = ntohs(uu.time_mid); \
-   uu.time_hi_and_version = ntohs(uu.time_hi_and_version); \
+   uu.time_low = pg_ntoh32(uu.time_low); \
+   uu.time_mid = pg_ntoh16(uu.time_mid); \
+   uu.time_hi_and_version = pg_ntoh16(uu.time_hi_and_version); \
 } while (0)
 
 #define UUID_V3_OR_V5(uu, v) \
index 7c004ffad8a6bfadfffe34da7a155cd6acccdde1..e87588040fafb418433bfd88c9f59fca506e7516 100644 (file)
@@ -17,8 +17,6 @@
 #include <ctype.h>
 #include <unistd.h>
 #include <sys/stat.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
 
 #include "access/heapam.h"
 #include "access/htup_details.h"
@@ -38,6 +36,7 @@
 #include "optimizer/planner.h"
 #include "nodes/makefuncs.h"
 #include "parser/parse_relation.h"
+#include "port/pg_bswap.h"
 #include "rewrite/rewriteHandler.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
@@ -671,7 +670,7 @@ CopySendInt32(CopyState cstate, int32 val)
 {
    uint32      buf;
 
-   buf = htonl((uint32) val);
+   buf = pg_hton32((uint32) val);
    CopySendData(cstate, &buf, sizeof(buf));
 }
 
@@ -690,7 +689,7 @@ CopyGetInt32(CopyState cstate, int32 *val)
        *val = 0;               /* suppress compiler warning */
        return false;
    }
-   *val = (int32) ntohl(buf);
+   *val = (int32) pg_ntoh32(buf);
    return true;
 }
 
@@ -702,7 +701,7 @@ CopySendInt16(CopyState cstate, int16 val)
 {
    uint16      buf;
 
-   buf = htons((uint16) val);
+   buf = pg_hton16((uint16) val);
    CopySendData(cstate, &buf, sizeof(buf));
 }
 
@@ -719,7 +718,7 @@ CopyGetInt16(CopyState cstate, int16 *val)
        *val = 0;               /* suppress compiler warning */
        return false;
    }
-   *val = (int16) ntohs(buf);
+   *val = (int16) pg_ntoh16(buf);
    return true;
 }
 
index 39a57d48353b2b3fddd404701bbfdeffb59f48b8..480e344eb3a45510b10a7983ab3d0bdf7f2de183 100644 (file)
@@ -18,7 +18,6 @@
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
-#include <arpa/inet.h>
 #include <unistd.h>
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
@@ -33,6 +32,7 @@
 #include "libpq/pqformat.h"
 #include "libpq/scram.h"
 #include "miscadmin.h"
+#include "port/pg_bswap.h"
 #include "replication/walsender.h"
 #include "storage/ipc.h"
 #include "utils/backend_random.h"
@@ -2840,7 +2840,7 @@ PerformRadiusTransaction(char *server, char *secret, char *portstr, char *identi
    radius_packet *receivepacket = &radius_recv_pack;
    char       *radius_buffer = (char *) &radius_send_pack;
    char       *receive_buffer = (char *) &radius_recv_pack;
-   int32       service = htonl(RADIUS_AUTHENTICATE_ONLY);
+   int32       service = pg_hton32(RADIUS_AUTHENTICATE_ONLY);
    uint8      *cryptvector;
    int         encryptedpasswordlen;
    uint8       encryptedpassword[RADIUS_MAX_PASSWORD_LENGTH];
@@ -2948,7 +2948,7 @@ PerformRadiusTransaction(char *server, char *secret, char *portstr, char *identi
 
    /* Length needs to be in network order on the wire */
    packetlength = packet->length;
-   packet->length = htons(packet->length);
+   packet->length = pg_hton16(packet->length);
 
    sock = socket(serveraddrs[0].ai_family, SOCK_DGRAM, 0);
    if (sock == PGINVALID_SOCKET)
@@ -3074,19 +3074,19 @@ PerformRadiusTransaction(char *server, char *secret, char *portstr, char *identi
        }
 
 #ifdef HAVE_IPV6
-       if (remoteaddr.sin6_port != htons(port))
+       if (remoteaddr.sin6_port != pg_hton16(port))
 #else
-       if (remoteaddr.sin_port != htons(port))
+       if (remoteaddr.sin_port != pg_hton16(port))
 #endif
        {
 #ifdef HAVE_IPV6
            ereport(LOG,
                    (errmsg("RADIUS response from %s was sent from incorrect port: %d",
-                           server, ntohs(remoteaddr.sin6_port))));
+                           server, pg_ntoh16(remoteaddr.sin6_port))));
 #else
            ereport(LOG,
                    (errmsg("RADIUS response from %s was sent from incorrect port: %d",
-                           server, ntohs(remoteaddr.sin_port))));
+                           server, pg_ntoh16(remoteaddr.sin_port))));
 #endif
            continue;
        }
@@ -3098,11 +3098,11 @@ PerformRadiusTransaction(char *server, char *secret, char *portstr, char *identi
            continue;
        }
 
-       if (packetlength != ntohs(receivepacket->length))
+       if (packetlength != pg_ntoh16(receivepacket->length))
        {
            ereport(LOG,
                    (errmsg("RADIUS response from %s has corrupt length: %d (actual length %d)",
-                           server, ntohs(receivepacket->length), packetlength)));
+                           server, pg_ntoh16(receivepacket->length), packetlength)));
            continue;
        }
 
index 53bf6bcd80ffbc15c890a6076e626913e7abdbcb..b8c463b1013378468ddad0ed9cfcd47b94903463 100644 (file)
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
-#include <arpa/inet.h>
 #include <sys/file.h>
 
 #include "libpq/ifaddr.h"
+#include "port/pg_bswap.h"
 
 static int range_sockaddr_AF_INET(const struct sockaddr_in *addr,
                       const struct sockaddr_in *netaddr,
@@ -144,7 +144,7 @@ pg_sockaddr_cidr_mask(struct sockaddr_storage *mask, char *numbits, int family)
                        & 0xffffffffUL;
                else
                    maskl = 0;
-               mask4.sin_addr.s_addr = htonl(maskl);
+               mask4.sin_addr.s_addr = pg_hton32(maskl);
                memcpy(mask, &mask4, sizeof(mask4));
                break;
            }
@@ -568,7 +568,7 @@ pg_foreach_ifaddr(PgIfAddrCallback callback, void *cb_data)
    /* addr 127.0.0.1/8 */
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
-   addr.sin_addr.s_addr = ntohl(0x7f000001);
+   addr.sin_addr.s_addr = pg_ntoh32(0x7f000001);
    memset(&mask, 0, sizeof(mask));
    pg_sockaddr_cidr_mask(&mask, "8", AF_INET);
    run_ifaddr_callback(callback, cb_data,
index 4452ea4228cb88381e42e24b6d33cde5063601f5..754154b83bb532ea172642980c71d8597d6966e8 100644 (file)
@@ -81,7 +81,6 @@
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
-#include <arpa/inet.h>
 #ifdef HAVE_UTIME_H
 #include <utime.h>
 #endif
@@ -92,6 +91,7 @@
 #include "common/ip.h"
 #include "libpq/libpq.h"
 #include "miscadmin.h"
+#include "port/pg_bswap.h"
 #include "storage/ipc.h"
 #include "utils/guc.h"
 #include "utils/memutils.h"
@@ -1286,7 +1286,7 @@ pq_getmessage(StringInfo s, int maxlen)
        return EOF;
    }
 
-   len = ntohl(len);
+   len = pg_ntoh32(len);
 
    if (len < 4 ||
        (maxlen > 0 && len > maxlen))
@@ -1569,7 +1569,7 @@ socket_putmessage(char msgtype, const char *s, size_t len)
    {
        uint32      n32;
 
-       n32 = htonl((uint32) (len + 4));
+       n32 = pg_hton32((uint32) (len + 4));
        if (internal_putbytes((char *) &n32, 4))
            goto fail;
    }
index c8cf67c0413332327272c7e1279e27faf0a273fe..f27a04f8344e084a3e8a5a091369a0ccdf0a4fbf 100644 (file)
 #include "postgres.h"
 
 #include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
 
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "mb/pg_wchar.h"
+#include "port/pg_bswap.h"
 
 
 /* --------------------------------
@@ -246,11 +245,11 @@ pq_sendint(StringInfo buf, int i, int b)
            appendBinaryStringInfo(buf, (char *) &n8, 1);
            break;
        case 2:
-           n16 = htons((uint16) i);
+           n16 = pg_hton16((uint16) i);
            appendBinaryStringInfo(buf, (char *) &n16, 2);
            break;
        case 4:
-           n32 = htonl((uint32) i);
+           n32 = pg_hton32((uint32) i);
            appendBinaryStringInfo(buf, (char *) &n32, 4);
            break;
        default:
@@ -270,17 +269,9 @@ pq_sendint(StringInfo buf, int i, int b)
 void
 pq_sendint64(StringInfo buf, int64 i)
 {
-   uint32      n32;
-
-   /* High order half first, since we're doing MSB-first */
-   n32 = (uint32) (i >> 32);
-   n32 = htonl(n32);
-   appendBinaryStringInfo(buf, (char *) &n32, 4);
+   uint64      n64 = pg_hton64(i);
 
-   /* Now the low order half */
-   n32 = (uint32) i;
-   n32 = htonl(n32);
-   appendBinaryStringInfo(buf, (char *) &n32, 4);
+   appendBinaryStringInfo(buf, (char *) &n64, sizeof(n64));
 }
 
 /* --------------------------------
@@ -304,7 +295,7 @@ pq_sendfloat4(StringInfo buf, float4 f)
    }           swap;
 
    swap.f = f;
-   swap.i = htonl(swap.i);
+   swap.i = pg_hton32(swap.i);
 
    appendBinaryStringInfo(buf, (char *) &swap.i, 4);
 }
@@ -460,11 +451,11 @@ pq_getmsgint(StringInfo msg, int b)
            break;
        case 2:
            pq_copymsgbytes(msg, (char *) &n16, 2);
-           result = ntohs(n16);
+           result = pg_ntoh16(n16);
            break;
        case 4:
            pq_copymsgbytes(msg, (char *) &n32, 4);
-           result = ntohl(n32);
+           result = pg_ntoh32(n32);
            break;
        default:
            elog(ERROR, "unsupported integer size %d", b);
@@ -485,20 +476,11 @@ pq_getmsgint(StringInfo msg, int b)
 int64
 pq_getmsgint64(StringInfo msg)
 {
-   int64       result;
-   uint32      h32;
-   uint32      l32;
+   uint64      n64;
 
-   pq_copymsgbytes(msg, (char *) &h32, 4);
-   pq_copymsgbytes(msg, (char *) &l32, 4);
-   h32 = ntohl(h32);
-   l32 = ntohl(l32);
+   pq_copymsgbytes(msg, (char *) &n64, sizeof(n64));
 
-   result = h32;
-   result <<= 32;
-   result |= l32;
-
-   return result;
+   return pg_ntoh64(n64);
 }
 
 /* --------------------------------
index 8a2cc2fc2b488ccb62ef76ae9ac35477332c28e4..2b2b993e2cfc828191949ed50dffcc793acf2492 100644 (file)
@@ -74,8 +74,6 @@
 #include <sys/socket.h>
 #include <fcntl.h>
 #include <sys/param.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
 #include <netdb.h>
 #include <limits.h>
 
 #include "miscadmin.h"
 #include "pg_getopt.h"
 #include "pgstat.h"
+#include "port/pg_bswap.h"
 #include "postmaster/autovacuum.h"
 #include "postmaster/bgworker_internals.h"
 #include "postmaster/fork_process.h"
@@ -1072,7 +1071,7 @@ PostmasterMain(int argc, char *argv[])
                                 "_postgresql._tcp.",
                                 NULL,
                                 NULL,
-                                htons(PostPortNumber),
+                                pg_hton16(PostPortNumber),
                                 0,
                                 NULL,
                                 NULL,
@@ -1966,7 +1965,7 @@ ProcessStartupPacket(Port *port, bool SSLdone)
        return STATUS_ERROR;
    }
 
-   len = ntohl(len);
+   len = pg_ntoh32(len);
    len -= 4;
 
    if (len < (int32) sizeof(ProtocolVersion) ||
@@ -2002,7 +2001,7 @@ ProcessStartupPacket(Port *port, bool SSLdone)
     * The first field is either a protocol version number or a special
     * request code.
     */
-   port->proto = proto = ntohl(*((ProtocolVersion *) buf));
+   port->proto = proto = pg_ntoh32(*((ProtocolVersion *) buf));
 
    if (proto == CANCEL_REQUEST_CODE)
    {
@@ -2281,8 +2280,8 @@ processCancelRequest(Port *port, void *pkt)
    int         i;
 #endif
 
-   backendPID = (int) ntohl(canc->backendPID);
-   cancelAuthCode = (int32) ntohl(canc->cancelAuthCode);
+   backendPID = (int) pg_ntoh32(canc->backendPID);
+   cancelAuthCode = (int32) pg_ntoh32(canc->cancelAuthCode);
 
    /*
     * See if we have a matching backend.  In the EXEC_BACKEND case, we can no
index 9207d76981acb8d3f68e7847d00ae72421286a18..8101ae74e0bfdb84b4fd029ccb6d22efeec1edf6 100644 (file)
@@ -17,9 +17,6 @@
  */
 #include "postgres.h"
 
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 #include "access/htup_details.h"
 #include "access/xact.h"
 #include "catalog/objectaccess.h"
@@ -28,6 +25,7 @@
 #include "libpq/pqformat.h"
 #include "mb/pg_wchar.h"
 #include "miscadmin.h"
+#include "port/pg_bswap.h"
 #include "tcop/fastpath.h"
 #include "tcop/tcopprot.h"
 #include "utils/acl.h"
@@ -92,7 +90,7 @@ GetOldFunctionMessage(StringInfo buf)
    if (pq_getbytes((char *) &ibuf, 4))
        return EOF;
    appendBinaryStringInfo(buf, (char *) &ibuf, 4);
-   nargs = ntohl(ibuf);
+   nargs = pg_ntoh32(ibuf);
    /* For each argument ... */
    while (nargs-- > 0)
    {
@@ -102,7 +100,7 @@ GetOldFunctionMessage(StringInfo buf)
        if (pq_getbytes((char *) &ibuf, 4))
            return EOF;
        appendBinaryStringInfo(buf, (char *) &ibuf, 4);
-       argsize = ntohl(ibuf);
+       argsize = pg_ntoh32(ibuf);
        if (argsize < -1)
        {
            /* FATAL here since no hope of regaining message sync */
index 81fef8cd516c6e836c5ab85ade3c40b70cd51353..a57ff8f2c4719658152780b6698a3d0e5f4d9c47 100644 (file)
 #include <sys/time.h>
 #include <unistd.h>
 
-/* for ntohl/htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 /* local includes */
 #include "receivelog.h"
 #include "streamutil.h"
 
 #include "access/xlog_internal.h"
-#include "pqexpbuffer.h"
 #include "common/fe_memutils.h"
 #include "datatype/timestamp.h"
+#include "port/pg_bswap.h"
+#include "pqexpbuffer.h"
 
 #define ERRCODE_DUPLICATE_OBJECT  "42710"
 
@@ -576,17 +573,9 @@ feTimestampDifferenceExceeds(TimestampTz start_time,
 void
 fe_sendint64(int64 i, char *buf)
 {
-   uint32      n32;
+   uint64      n64 = pg_hton64(i);
 
-   /* High order half first, since we're doing MSB-first */
-   n32 = (uint32) (i >> 32);
-   n32 = htonl(n32);
-   memcpy(&buf[0], &n32, 4);
-
-   /* Now the low order half */
-   n32 = (uint32) i;
-   n32 = htonl(n32);
-   memcpy(&buf[4], &n32, 4);
+   memcpy(buf, &n64, sizeof(n64));
 }
 
 /*
@@ -595,18 +584,9 @@ fe_sendint64(int64 i, char *buf)
 int64
 fe_recvint64(char *buf)
 {
-   int64       result;
-   uint32      h32;
-   uint32      l32;
-
-   memcpy(&h32, buf, 4);
-   memcpy(&l32, buf + 4, 4);
-   h32 = ntohl(h32);
-   l32 = ntohl(l32);
+   uint64      n64;
 
-   result = h32;
-   result <<= 32;
-   result |= l32;
+   memcpy(&n64, buf, sizeof(n64));
 
-   return result;
+   return pg_ntoh64(n64);
 }
index 8ad51942ff27f2995cf6e66ebb5747092698d0f6..8b996f46990b48f1dc4a4df8658a9ae9174a74f0 100644 (file)
@@ -63,7 +63,9 @@
 
 #include "parallel.h"
 #include "pg_backup_utils.h"
+
 #include "fe_utils/string_utils.h"
+#include "port/pg_bswap.h"
 
 /* Mnemonic macros for indexing the fd array returned by pipe(2) */
 #define PIPE_READ                          0
@@ -1764,8 +1766,8 @@ pgpipe(int handles[2])
 
    memset((void *) &serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
-   serv_addr.sin_port = htons(0);
-   serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+   serv_addr.sin_port = pg_hton16(0);
+   serv_addr.sin_addr.s_addr = pg_hton32(INADDR_LOOPBACK);
    if (bind(s, (SOCKADDR *) &serv_addr, len) == SOCKET_ERROR)
    {
        write_msg(modulename, "pgpipe: could not bind: error code %d\n",
index 0cdff55cabea4fbedb7bbdeab988bbed4570612e..79bec40b02facb7339b28f90f24797e00e2d6b77 100644 (file)
 #include <fcntl.h>
 #include <unistd.h>
 
-/* for ntohl/htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 #include "pg_rewind.h"
 #include "datapagemap.h"
 #include "fetch.h"
@@ -28,6 +24,7 @@
 #include "libpq-fe.h"
 #include "catalog/catalog.h"
 #include "catalog/pg_type.h"
+#include "port/pg_bswap.h"
 
 static PGconn *conn = NULL;
 
@@ -220,28 +217,6 @@ libpqProcessFileList(void)
    PQclear(res);
 }
 
-/*
- * Converts an int64 from network byte order to native format.
- */
-static int64
-pg_recvint64(int64 value)
-{
-   union
-   {
-       int64       i64;
-       uint32      i32[2];
-   }           swap;
-   int64       result;
-
-   swap.i64 = value;
-
-   result = (uint32) ntohl(swap.i32[0]);
-   result <<= 32;
-   result |= (uint32) ntohl(swap.i32[1]);
-
-   return result;
-}
-
 /*----
  * Runs a query, which returns pieces of files from the remote source data
  * directory, and overwrites the corresponding parts of target files with
@@ -318,7 +293,7 @@ receiveFileChunks(const char *sql)
 
        /* Read result set to local variables */
        memcpy(&chunkoff, PQgetvalue(res, 0, 1), sizeof(int64));
-       chunkoff = pg_recvint64(chunkoff);
+       chunkoff = pg_ntoh64(chunkoff);
        chunksize = PQgetlength(res, 0, 2);
 
        filenamelen = PQgetlength(res, 0, 0);
index e43d035d4da82888fd08137a5e7fc99729abba0f..e54fe1a7c985de6053d12a6823acd146eccb7da9 100644 (file)
 #include "postgres_fe.h"
 #endif
 
-/* for htonl */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 #include "common/base64.h"
 #include "common/scram-common.h"
+#include "port/pg_bswap.h"
 
 #define HMAC_IPAD 0x36
 #define HMAC_OPAD 0x5C
@@ -109,7 +106,7 @@ scram_SaltedPassword(const char *password,
                     uint8 *result)
 {
    int         password_len = strlen(password);
-   uint32      one = htonl(1);
+   uint32      one = pg_hton32(1);
    int         i,
                j;
    uint8       Ui[SCRAM_KEY_LEN];
index c580d91135aad7e52f1610fbbf41931b5a92cd01..5f79803607156d1777a23f025c88476b533f9021 100644 (file)
@@ -47,7 +47,6 @@
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
-#include <arpa/inet.h>
 #endif
 
 #ifdef ENABLE_THREAD_SAFETY
@@ -73,6 +72,7 @@ static int ldapServiceLookup(const char *purl, PQconninfoOption *options,
 
 #include "common/ip.h"
 #include "mb/pg_wchar.h"
+#include "port/pg_bswap.h"
 
 
 #ifndef WIN32
@@ -2443,7 +2443,7 @@ keep_going:                       /* We will come back to here until there is
                     * shouldn't since we only got here if the socket is
                     * write-ready.
                     */
-                   pv = htonl(NEGOTIATE_SSL_CODE);
+                   pv = pg_hton32(NEGOTIATE_SSL_CODE);
                    if (pqPacketSend(conn, 0, &pv, sizeof(pv)) != STATUS_OK)
                    {
                        appendPQExpBuffer(&conn->errorMessage,
@@ -3838,10 +3838,10 @@ retry3:
 
    /* Create and send the cancel request packet. */
 
-   crp.packetlen = htonl((uint32) sizeof(crp));
-   crp.cp.cancelRequestCode = (MsgType) htonl(CANCEL_REQUEST_CODE);
-   crp.cp.backendPID = htonl(be_pid);
-   crp.cp.cancelAuthCode = htonl(be_key);
+   crp.packetlen = pg_hton32((uint32) sizeof(crp));
+   crp.cp.cancelRequestCode = (MsgType) pg_hton32(CANCEL_REQUEST_CODE);
+   crp.cp.backendPID = pg_hton32(be_pid);
+   crp.cp.cancelAuthCode = pg_hton32(be_key);
 
 retry4:
    if (send(tmpsock, (char *) &crp, sizeof(crp), 0) != (int) sizeof(crp))
index 343e5303d99803c52a4a7e6b00749b2f06d498fb..2ff5559233a00810bcc1a6801106f3414ccfb192 100644 (file)
 #include <fcntl.h>
 #include <limits.h>
 #include <sys/stat.h>
-#include <netinet/in.h>            /* for ntohl/htonl */
-#include <arpa/inet.h>
 
 #include "libpq-fe.h"
 #include "libpq-int.h"
 #include "libpq/libpq-fs.h"        /* must come after sys/stat.h */
+#include "port/pg_bswap.h"
 
 #define LO_BUFSIZE       8192
 
@@ -1070,11 +1069,11 @@ lo_hton64(pg_int64 host64)
 
    /* High order half first, since we're doing MSB-first */
    t = (uint32) (host64 >> 32);
-   swap.i32[0] = htonl(t);
+   swap.i32[0] = pg_hton32(t);
 
    /* Now the low order half */
    t = (uint32) host64;
-   swap.i32[1] = htonl(t);
+   swap.i32[1] = pg_hton32(t);
 
    return swap.i64;
 }
@@ -1095,9 +1094,9 @@ lo_ntoh64(pg_int64 net64)
 
    swap.i64 = net64;
 
-   result = (uint32) ntohl(swap.i32[0]);
+   result = (uint32) pg_ntoh32(swap.i32[0]);
    result <<= 32;
-   result |= (uint32) ntohl(swap.i32[1]);
+   result |= (uint32) pg_ntoh32(swap.i32[1]);
 
    return result;
 }
index cac6359585ee370a522aa6f223e1bd51a62d525d..41b1749d074563749be4f2c3eb588dcb614d11a7 100644 (file)
@@ -33,9 +33,6 @@
 #include <signal.h>
 #include <time.h>
 
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
 #ifdef WIN32
 #include "win32.h"
 #else
@@ -53,6 +50,7 @@
 #include "libpq-fe.h"
 #include "libpq-int.h"
 #include "mb/pg_wchar.h"
+#include "port/pg_bswap.h"
 #include "pg_config_paths.h"
 
 
@@ -278,14 +276,14 @@ pqGetInt(int *result, size_t bytes, PGconn *conn)
                return EOF;
            memcpy(&tmp2, conn->inBuffer + conn->inCursor, 2);
            conn->inCursor += 2;
-           *result = (int) ntohs(tmp2);
+           *result = (int) pg_ntoh16(tmp2);
            break;
        case 4:
            if (conn->inCursor + 4 > conn->inEnd)
                return EOF;
            memcpy(&tmp4, conn->inBuffer + conn->inCursor, 4);
            conn->inCursor += 4;
-           *result = (int) ntohl(tmp4);
+           *result = (int) pg_ntoh32(tmp4);
            break;
        default:
            pqInternalNotice(&conn->noticeHooks,
@@ -314,12 +312,12 @@ pqPutInt(int value, size_t bytes, PGconn *conn)
    switch (bytes)
    {
        case 2:
-           tmp2 = htons((uint16) value);
+           tmp2 = pg_hton16((uint16) value);
            if (pqPutMsgBytes((const char *) &tmp2, 2, conn))
                return EOF;
            break;
        case 4:
-           tmp4 = htonl((uint32) value);
+           tmp4 = pg_hton32((uint32) value);
            if (pqPutMsgBytes((const char *) &tmp4, 4, conn))
                return EOF;
            break;
@@ -597,7 +595,7 @@ pqPutMsgEnd(PGconn *conn)
    {
        uint32      msgLen = conn->outMsgEnd - conn->outMsgStart;
 
-       msgLen = htonl(msgLen);
+       msgLen = pg_hton32(msgLen);
        memcpy(conn->outBuffer + conn->outMsgStart, &msgLen, 4);
    }
 
index 83f74f3985244d96f9894786e3042cd245ee01d5..1320d18a9967c43ec4e8dcf28bb25065f38ba24b 100644 (file)
 
 #include "libpq-fe.h"
 #include "libpq-int.h"
+#include "port/pg_bswap.h"
 
 
 #ifdef WIN32
 #include "win32.h"
 #else
 #include <unistd.h>
-#include <netinet/in.h>
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
-#include <arpa/inet.h>
 #endif
 
 
@@ -1609,7 +1608,7 @@ pqBuildStartupPacket2(PGconn *conn, int *packetlen,
 
    MemSet(startpacket, 0, sizeof(StartupPacket));
 
-   startpacket->protoVersion = htonl(conn->pversion);
+   startpacket->protoVersion = pg_hton32(conn->pversion);
 
    /* strncpy is safe here: postmaster will handle full fields correctly */
    strncpy(startpacket->user, conn->pguser, SM_USER);
index 7da5fb28fb2f07bcbf8fc36b77f48959fa8dbc27..21fb8f2f213c5473e18d894fde652973934ae573 100644 (file)
 #include "libpq-int.h"
 
 #include "mb/pg_wchar.h"
+#include "port/pg_bswap.h"
 
 #ifdef WIN32
 #include "win32.h"
 #else
 #include <unistd.h>
-#include <netinet/in.h>
 #ifdef HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
-#include <arpa/inet.h>
 #endif
 
 
@@ -2148,7 +2147,7 @@ build_startup_packet(const PGconn *conn, char *packet,
    /* Protocol version comes first. */
    if (packet)
    {
-       ProtocolVersion pv = htonl(conn->pversion);
+       ProtocolVersion pv = pg_hton32(conn->pversion);
 
        memcpy(packet + packet_len, &pv, sizeof(ProtocolVersion));
    }
index e5b5702c79975a5370b247c1b3dbcbc3341757ba..2e0e313c9f43b6429d4d762fe0d7d54accbf3dad 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "getaddrinfo.h"
 #include "libpq/pqcomm.h"      /* needed for struct sockaddr_storage */
+#include "port/pg_bsawp.h"
 
 
 #ifdef WIN32
@@ -178,7 +179,7 @@ getaddrinfo(const char *node, const char *service,
    if (node)
    {
        if (node[0] == '\0')
-           sin.sin_addr.s_addr = htonl(INADDR_ANY);
+           sin.sin_addr.s_addr = pg_hton32(INADDR_ANY);
        else if (hints.ai_flags & AI_NUMERICHOST)
        {
            if (!inet_aton(node, &sin.sin_addr))
@@ -221,13 +222,13 @@ getaddrinfo(const char *node, const char *service,
    else
    {
        if (hints.ai_flags & AI_PASSIVE)
-           sin.sin_addr.s_addr = htonl(INADDR_ANY);
+           sin.sin_addr.s_addr = pg_hton32(INADDR_ANY);
        else
-           sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+           sin.sin_addr.s_addr = pg_hton32(INADDR_LOOPBACK);
    }
 
    if (service)
-       sin.sin_port = htons((unsigned short) atoi(service));
+       sin.sin_port = pg_hton16((unsigned short) atoi(service));
 
 #ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
    sin.sin_len = sizeof(sin);
@@ -402,7 +403,7 @@ getnameinfo(const struct sockaddr *sa, int salen,
        if (sa->sa_family == AF_INET)
        {
            ret = snprintf(service, servicelen, "%d",
-                          ntohs(((struct sockaddr_in *) sa)->sin_port));
+                          pg_ntoh16(((struct sockaddr_in *) sa)->sin_port));
        }
        if (ret == -1 || ret >= servicelen)
            return EAI_MEMORY;
index 68efd4723ec25f847bdd8deeb5f91b759c5edaac..b31d1f025d34e634d7ddfd6cfb94d0829cad0f6c 100644 (file)
@@ -43,6 +43,8 @@
 #include <netinet/in.h>
 #include <ctype.h>
 
+#include "port/pg_swap.h"
+
 /*
  * Check whether "cp" is a valid ascii representation
  * of an Internet address and convert to a binary address.
@@ -142,6 +144,6 @@ inet_aton(const char *cp, struct in_addr *addr)
            break;
    }
    if (addr)
-       addr->s_addr = htonl(val);
+       addr->s_addr = pg_hton32(val);
    return 1;
 }