r26487: Cope with systems that don't have struct sockaddr.sa_len.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 17 Dec 2007 04:53:37 +0000 (05:53 +0100)
committerStefan Metzmacher <metze@samba.org>
Fri, 21 Dec 2007 04:50:44 +0000 (05:50 +0100)
(This used to be commit 56080469ab28ae5a2f456cced34814d9c33480c6)

source4/lib/replace/getifaddrs.c
source4/lib/replace/getifaddrs.m4

index e04c023209baa11f148f192d6b8a920afc013bff..b681a8649cd379e83caa1664c32fb1d71ac7dd74 100644 (file)
@@ -53,10 +53,17 @@ void freeifaddrs(struct ifaddrs *ifp)
 
 struct sockaddr *sockaddr_dup(struct sockaddr *sa)
 {
-       struct sockaddr *ret = calloc(1, sa->sa_len);
+       struct sockaddr *ret;
+       socklen_t socklen;
+#ifdef HAVE_SOCKADDR_SA_LEN
+       socklen = sa->sa_len;
+#else
+       socklen = sizeof(struct sockaddr_storage);
+#endif
+       ret = = calloc(1, socklen);
        if (ret == NULL)
                return NULL;
-       memcpy(ret, sa, sa->sa_len);
+       memcpy(ret, sa, socklen);
        return ret;
 }
 #endif
index 7e6016ed8f053b9c8254505f7f912b4ee1c70ad2..85f08ee6c3da86f22db667614b6a4c2f4478b836 100644 (file)
@@ -1,5 +1,11 @@
 AC_CHECK_HEADERS([ifaddrs.h])
 
+dnl Used when getifaddrs is not available
+AC_CHECK_MEMBERS([struct sockaddr.sa_len], 
+        [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has a sa_len member])],
+        [],
+        [#include <sys/socket.h>])
+
 dnl test for getifaddrs and freeifaddrs
 AC_CACHE_CHECK([for getifaddrs and freeifaddrs],samba_cv_HAVE_GETIFADDRS,[
 AC_TRY_COMPILE([