sys_socket: MinGW and IRIX does not have sa_family_t type.
authorSimon Josefsson <simon@josefsson.org>
Wed, 20 May 2009 06:52:49 +0000 (08:52 +0200)
committerSimon Josefsson <simon@josefsson.org>
Wed, 20 May 2009 06:52:49 +0000 (08:52 +0200)
Reported by "Tom G. Christensen" <tgc@jupiterrise.com>.

ChangeLog
lib/sys_socket.in.h
m4/sys_socket_h.m4
modules/sys_socket
tests/test-sys_socket.c

index a46971a..a153fa9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-05-20  Simon Josefsson  <simon@josefsson.org>
+
+       MinGW and IRIX does not have sa_family_t type.  Reported by "Tom
+       G. Christensen" <tgc@jupiterrise.com>.
+       * m4/sys_socket_h.m4: Check for sa_family_t.
+       * lib/sys_socket.in.h: Typedef sa_family_t when needed.
+       * modules/sys_socket: Substitute HAVE_SA_FAMILY_T.
+       * tests/test-sys_socket.c: Check that sa_family_t works.
+
 2009-05-18  Eric Blake  <ebb9@byu.net>
 
        maint.mk: allow gnulib_dir in VPATH build
index 0ce7e9b..4553f60 100644 (file)
 #ifndef _GL_SYS_SOCKET_H
 #define _GL_SYS_SOCKET_H
 
+#if !@HAVE_SA_FAMILY_T@
+typedef unsigned short  sa_family_t;
+#endif
+
 #if !@HAVE_STRUCT_SOCKADDR_STORAGE@
 # include <alignof.h>
 /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on
index d1cb9c2..74e8110 100644 (file)
@@ -42,7 +42,7 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
   fi
   # We need to check for ws2tcpip.h now.
   gl_PREREQ_SYS_H_SOCKET
-  AC_CHECK_TYPES([struct sockaddr_storage],,,[
+  AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[
   /* sys/types.h is not needed according to POSIX, but the
      sys/socket.h in i386-unknown-freebsd4.10 and
      powerpc-apple-darwin5.5 required it. */
@@ -58,6 +58,10 @@ AC_DEFUN([gl_HEADER_SYS_SOCKET],
     HAVE_STRUCT_SOCKADDR_STORAGE=0
     SYS_SOCKET_H='sys/socket.h'
   fi
+  if test $ac_cv_type_sa_family_t = no; then
+    HAVE_SA_FAMILY_T=0
+    SYS_SOCKET_H='sys/socket.h'
+  fi
   if test -n "$SYS_SOCKET_H"; then
     gl_PREREQ_SYS_H_WINSOCK2
   fi
@@ -137,4 +141,5 @@ AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
   GNULIB_SETSOCKOPT=0;  AC_SUBST([GNULIB_SETSOCKOPT])
   GNULIB_SHUTDOWN=0;    AC_SUBST([GNULIB_SHUTDOWN])
   HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
+  HAVE_SA_FAMILY_T=1;   AC_SUBST([HAVE_SA_FAMILY_T])
 ])
index 27bbbcc..e07dd05 100644 (file)
@@ -46,6 +46,7 @@ sys/socket.h: sys_socket.in.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_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/sys_socket.in.h; \
        } > $@-t
index fe7688e..3d946a8 100644 (file)
@@ -31,6 +31,7 @@ int
 main ()
 {
   struct sockaddr_storage x;
+  sa_family_t i;
 
   /* Check some errno values.  */
   switch (0)
@@ -46,6 +47,7 @@ main ()
     }
 
   x.ss_family = 42;
+  i = 4711;
 
   return 0;
 }