sys_socket: Ensure ss_family field on AIX.
authorBruno Haible <bruno@clisp.org>
Sun, 28 Nov 2010 16:04:03 +0000 (17:04 +0100)
committerBruno Haible <bruno@clisp.org>
Tue, 30 Nov 2010 20:17:15 +0000 (21:17 +0100)
* lib/sys_socket.in.h (ss_family): New macro definition.
* m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Set
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY. Set SYS_SOCKET_H if necessary.
(gl_SYS_SOCKET_H_DEFAULTS): Initialize
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY.
* modules/sys_socket (Makefile.am): Substitute
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY.
* doc/posix-headers/sys_socket.texi: Mention the AIX bug.

ChangeLog
doc/posix-headers/sys_socket.texi
lib/sys_socket.in.h
m4/sys_socket_h.m4
modules/sys_socket

index 41c8de5..6c541e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-11-28  Bruno Haible  <bruno@clisp.org>
+
+       sys_socket: Ensure ss_family field on AIX.
+       * lib/sys_socket.in.h (ss_family): New macro definition.
+       * m4/sys_socket_h.m4 (gl_HEADER_SYS_SOCKET): Set
+       HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY. Set SYS_SOCKET_H if necessary.
+       (gl_SYS_SOCKET_H_DEFAULTS): Initialize
+       HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY.
+       * modules/sys_socket (Makefile.am): Substitute
+       HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY.
+       * doc/posix-headers/sys_socket.texi: Mention the AIX bug.
+
 2010-11-27  Bruno Haible  <bruno@clisp.org>
 
        readline: Improve configure output.
index 7a1fe6c..dc975b6 100644 (file)
@@ -18,6 +18,10 @@ This header file is lacking the @code{SHUT_RD}, @code{SHUT_WR},
 @code{SHUT_RDWR} macros on some platforms, despite having the @code{shutdown}
 functions:
 emx+gcc.
+@item
+The @code{struct sockaddr_storage} type does not have a member @code{ss_family}
+on some platforms:
+AIX 7.1.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index d7a94bf..21990e9 100644 (file)
 typedef unsigned short  sa_family_t;
 #endif
 
-#if !@HAVE_STRUCT_SOCKADDR_STORAGE@
+#if @HAVE_STRUCT_SOCKADDR_STORAGE@
+/* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1.  */
+# if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+#  ifndef ss_family
+#   define ss_family __ss_family
+#  endif
+# endif
+#else
 # include <alignof.h>
 /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on
    2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */
index 42b9f0e..c7627cb 100644 (file)
@@ -1,4 +1,4 @@
-# sys_socket_h.m4 serial 19
+# sys_socket_h.m4 serial 20
 dnl Copyright (C) 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -57,6 +57,23 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
   if test $ac_cv_type_sa_family_t = no; then
     HAVE_SA_FAMILY_T=0
   fi
+  if test $ac_cv_type_struct_sockaddr_storage != no; then
+    AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family],
+      [],
+      [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0],
+      [#include <sys/types.h>
+       #ifdef HAVE_SYS_SOCKET_H
+       #include <sys/socket.h>
+       #endif
+       #ifdef HAVE_WS2TCPIP_H
+       #include <ws2tcpip.h>
+       #endif
+      ])
+  fi
+  if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
+     || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
+    SYS_SOCKET_H='sys/socket.h'
+  fi
   gl_PREREQ_SYS_H_WINSOCK2
 
   dnl Check for declarations of anything we want to poison if the
@@ -145,6 +162,8 @@ AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
   GNULIB_SHUTDOWN=0;    AC_SUBST([GNULIB_SHUTDOWN])
   GNULIB_ACCEPT4=0;     AC_SUBST([GNULIB_ACCEPT4])
   HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
+  HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
+                        AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
   HAVE_SA_FAMILY_T=1;   AC_SUBST([HAVE_SA_FAMILY_T])
   HAVE_ACCEPT4=1;       AC_SUBST([HAVE_ACCEPT4])
 ])
index deef2c7..775996f 100644 (file)
@@ -52,6 +52,7 @@ sys/socket.h: sys_socket.in.h $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
              -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
              -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
              -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
+             -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \
              -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
              -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \
              -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \