From: Bruno Haible Date: Sun, 28 Nov 2010 16:04:03 +0000 (+0100) Subject: sys_socket: Ensure ss_family field on AIX. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5500698d4bebe8c204bfeb88673f71240647686a;p=pspp 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. --- diff --git a/ChangeLog b/ChangeLog index 41c8de5c0f..6c541e6a48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-11-28 Bruno Haible + + 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 readline: Improve configure output. diff --git a/doc/posix-headers/sys_socket.texi b/doc/posix-headers/sys_socket.texi index 7a1fe6c4c9..dc975b611f 100644 --- a/doc/posix-headers/sys_socket.texi +++ b/doc/posix-headers/sys_socket.texi @@ -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: diff --git a/lib/sys_socket.in.h b/lib/sys_socket.in.h index d7a94bf125..21990e992d 100644 --- a/lib/sys_socket.in.h +++ b/lib/sys_socket.in.h @@ -70,7 +70,14 @@ 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 /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4 index 42b9f0e79c..c7627cb94e 100644 --- a/m4/sys_socket_h.m4 +++ b/m4/sys_socket_h.m4 @@ -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 + #ifdef HAVE_SYS_SOCKET_H + #include + #endif + #ifdef HAVE_WS2TCPIP_H + #include + #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]) ]) diff --git a/modules/sys_socket b/modules/sys_socket index deef2c777d..775996fc94 100644 --- a/modules/sys_socket +++ b/modules/sys_socket @@ -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)' \