Remove configure probes for sockaddr_storage members.
authorThomas Munro <tmunro@postgresql.org>
Mon, 22 Aug 2022 04:47:17 +0000 (16:47 +1200)
committerThomas Munro <tmunro@postgresql.org>
Mon, 22 Aug 2022 05:50:30 +0000 (17:50 +1200)
Remove four probes for members of sockaddr_storage.  Keep only the probe
for sockaddr's sa_len, which is enough for our two remaining places that
know about _len fields:

1.  ifaddr.c needs to know if sockaddr has sa_len to understand the
result of ioctl(SIOCGIFCONF).  Only AIX is still using the relevant code
today, but it seems like a good idea to keep it compilable on Linux.

2.  ip.c was testing for presence of ss_len to decide whether to fill in
sun_len in our getaddrinfo_unix() function.  It's just as good to test
for sa_len.  If you have one, you have them all.

(The code in #2 isn't actually needed at all on several OSes I checked
since modern versions ignore sa_len on input to system calls.  Proving
that's the case for all relevant OSes is left for another day, but
wouldn't get rid of that last probe anyway if we still want it for #1.)

Discussion: https://postgr.es/m/CA%2BhUKGJJjF2AqdU_Aug5n2MAc1gr%3DGykNjVBZq%2Bd6Jrcp3Dyvg%40mail.gmail.com

config/c-library.m4
configure
configure.ac
src/common/ip.c
src/include/libpq/pqcomm.h
src/include/pg_config.h.in
src/tools/msvc/Solution.pm

index 58453c4f76f131f2c7da87fbf08982057be20cc8..c1dd80467988cad4c9eda4a22f8a9bac8c324298 100644 (file)
@@ -73,20 +73,14 @@ AC_DEFUN([PGAC_UNION_SEMUN],
 ])])# PGAC_UNION_SEMUN
 
 
-# PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS
-# --------------------------------------
-# Check the members of `struct sockaddr_storage'.  We need to know about
-# ss_family and ss_len.  (Some platforms follow RFC 2553 and call them
-# __ss_family and __ss_len.)  We also check struct sockaddr's sa_len.
-AC_DEFUN([PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS],
-[AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family,
-          struct sockaddr_storage.__ss_family,
-          struct sockaddr_storage.ss_len,
-          struct sockaddr_storage.__ss_len,
-          struct sockaddr.sa_len], [], [],
+# PGAC_STRUCT_SOCKADDR_MEMBERS
+# ----------------------------
+# Check if struct sockaddr and subtypes have 4.4BSD-style length.
+AC_DEFUN([PGAC_STRUCT_SOCKADDR_SA_LEN],
+[AC_CHECK_MEMBERS([struct sockaddr.sa_len], [], [],
 [#include <sys/types.h>
 #include <sys/socket.h>
-])])# PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS
+])])# PGAC_STRUCT_SOCKADDR_MEMBERS
 
 
 # PGAC_TYPE_LOCALE_T
index b28fccbc470f6f9ef32c2ded6d075121f274a318..4bd050008bab3c1450a272a0b84128ad87859fcc 100755 (executable)
--- a/configure
+++ b/configure
@@ -14990,54 +14990,6 @@ _ACEOF
 
 fi
 
-ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include <sys/types.h>
-#include <sys/socket.h>
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "__ss_family" "ac_cv_member_struct_sockaddr_storage___ss_family" "#include <sys/types.h>
-#include <sys/socket.h>
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage___ss_family" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_len" "ac_cv_member_struct_sockaddr_storage_ss_len" "#include <sys/types.h>
-#include <sys/socket.h>
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage_ss_len" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
-_ACEOF
-
-
-fi
-ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "__ss_len" "ac_cv_member_struct_sockaddr_storage___ss_len" "#include <sys/types.h>
-#include <sys/socket.h>
-
-"
-if test "x$ac_cv_member_struct_sockaddr_storage___ss_len" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN 1
-_ACEOF
-
-
-fi
 ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include <sys/types.h>
 #include <sys/socket.h>
 
index dd368290a6289628048518cb991f09034941e2c2..6ff294d4052033d637460baf8c9da0f226c4a26e 100644 (file)
@@ -1614,7 +1614,7 @@ PGAC_C_COMPUTED_GOTO
 PGAC_STRUCT_TIMEZONE
 PGAC_UNION_SEMUN
 AC_CHECK_TYPES(socklen_t, [], [], [#include <sys/socket.h>])
-PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS
+PGAC_STRUCT_SOCKADDR_SA_LEN
 
 PGAC_TYPE_LOCALE_T
 
index 0149d07ae7ca843522bd462b48f51982064e8dab..9b611cdc8c3966131d74679dee504e4d050f23a6 100644 (file)
@@ -227,7 +227,7 @@ getaddrinfo_unix(const char *path, const struct addrinfo *hintsp,
     * something with it.  To suppress the warning, clamp the struct size to
     * what will fit in sun_len.
     */
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
+#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
    unp->sun_len = Min(sizeof(struct sockaddr_un),
                       ((size_t) 1 << (sizeof(unp->sun_len) * BITS_PER_BYTE)) - 1);
 #endif
index 7e2f1495f3e9f639ddf63144a4177a85f8d24f66..fcf68df39b90735d4dd90b465fede3b70472fb00 100644 (file)
 #include <netdb.h>
 #include <netinet/in.h>
 
-#ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY
-#define ss_family __ss_family
-#else
-#error struct sockaddr_storage does not provide an ss_family member
-#endif
-#endif
-
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN
-#define ss_len __ss_len
-#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
-#endif
-
 typedef struct
 {
    struct sockaddr_storage addr;
index 26eb6a2dfeff89783d6deb32de0ec95699b49799..109776e465be422a073a67b8112bec18e69d0e37 100644 (file)
 /* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
 #undef HAVE_STRUCT_SOCKADDR_SA_LEN
 
-/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
-
-/* Define to 1 if `ss_len' is a member of `struct sockaddr_storage'. */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN
-
-/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY
-
-/* Define to 1 if `__ss_len' is a member of `struct sockaddr_storage'. */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN
-
 /* Define to 1 if `tm_zone' is a member of `struct tm'. */
 #undef HAVE_STRUCT_TM_TM_ZONE
 
index fead5c2a72f91f1fca6a8c73514a5a6c42721a96..a3da3f748a1522f37c5c2190bfb6405ec9d42c22 100644 (file)
@@ -343,10 +343,6 @@ sub GenerateFiles
        HAVE_STRUCT_CMSGCRED                     => undef,
        HAVE_STRUCT_OPTION                       => undef,
        HAVE_STRUCT_SOCKADDR_SA_LEN              => undef,
-       HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY   => 1,
-       HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN      => undef,
-       HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY => undef,
-       HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN    => undef,
        HAVE_STRUCT_TM_TM_ZONE                   => undef,
        HAVE_SYNC_FILE_RANGE                     => undef,
        HAVE_SYNCFS                              => undef,