From 274328c8a88319f0a16d57c82128ee80ac26e578 Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Tue, 15 Jul 2003 17:54:34 +0000 Subject: [PATCH] Avoid use of int64_t, which seems not to be very portable. Simplify padding logic for struct sockaddr_storage --- original version did not do what it claimed to when SALEN is defined. --- src/include/libpq/pqcomm.h | 48 +++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h index 0ed84ca22f7..0cabdc24c11 100644 --- a/src/include/libpq/pqcomm.h +++ b/src/include/libpq/pqcomm.h @@ -9,7 +9,7 @@ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pqcomm.h,v 1.88 2003/06/24 01:49:22 momjian Exp $ + * $Id: pqcomm.h,v 1.89 2003/07/15 17:54:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -34,41 +34,35 @@ #ifndef HAVE_STRUCT_SOCKADDR_STORAGE /* Define a struct sockaddr_storage if we don't have one. */ -/* - * Desired design of maximum size and alignment - */ -#define _SS_MAXSIZE 128 /* Implementation specific max size */ -#define _SS_ALIGNSIZE (sizeof (int64_t)) - /* Implementation specific desired alignment */ -/* - * Definitions used for sockaddr_storage structure paddings design. - */ -#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (sa_family_t)) -#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (sa_family_t) + \ - _SS_PAD1SIZE + _SS_ALIGNSIZE)) + +#define _SS_MAXSIZE 128 /* Implementation specific max size */ #ifdef __CYGWIN__ typedef unsigned short sa_family_t; #endif +/* This must exactly match the non-padding fields of sockaddr_storage! */ +struct nopad_sockaddr_storage { +#ifdef SALEN + uint8 __ss_len; /* address length */ +#endif + sa_family_t ss_family; /* address family */ + + int64 __ss_align; /* ensures struct is properly aligned */ +}; + struct sockaddr_storage { #ifdef SALEN - uint8_t __ss_len; /* address length */ + uint8 __ss_len; /* address length */ #endif - sa_family_t ss_family; /* address family */ - - char __ss_pad1[_SS_PAD1SIZE]; - /* 6 byte pad, this is to make implementation - * specific pad up to alignment field that - * follows explicit in the data structure */ - int64_t __ss_align; - /* field to force desired structure - * storage alignment */ - char __ss_pad2[_SS_PAD2SIZE]; - /* 112 byte pad to achieve desired size, - * _SS_MAXSIZE value minus size of ss_family - * __ss_pad1, __ss_align fields is 112 */ + sa_family_t ss_family; /* address family */ + + int64 __ss_align; /* ensures struct is properly aligned */ + + char __ss_pad[_SS_MAXSIZE - sizeof(struct nopad_sockaddr_storage)]; + /* ensures struct has desired size */ }; + #elif !defined(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY) # ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY # define ss_family __ss_family -- GitLab