]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 718] Determine/use the correct type of saddrlen for getsockname()
authorHarlan Stenn <stenn@ntp.org>
Tue, 10 Oct 2006 23:52:42 +0000 (19:52 -0400)
committerHarlan Stenn <stenn@ntp.org>
Tue, 10 Oct 2006 23:52:42 +0000 (19:52 -0400)
bk: 452c324aWS9xcYl9riME6RMi9kf6LA

configure.ac
libisc/net.c
ntpd/ntp_io.c

index 7f11a85103299d1c864f0348ce474e367e19350d..3f1f82498428a54f5b07dbb08268f18479db12c5 100644 (file)
@@ -637,7 +637,7 @@ fi
 #
 # Look for in_port_t.
 #
-AC_MSG_CHECKING(for type in_port_t)
+AC_MSG_CHECKING(for in_port_t)
 AC_TRY_COMPILE([
 #include <sys/types.h>
 #include <netinet/in.h>],
@@ -1009,6 +1009,28 @@ no)
 ;;
 esac
 
+AC_MSG_CHECKING([type of socklen arg for getsockname()])
+AC_CACHE_VAL(ac_cv_func_getsockname_socklen_type,dnl
+[for ac_cv_func_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do
+  AC_TRY_COMPILE(dnl
+[#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+extern getsockname (int, struct sockaddr *, $ac_cv_func_getsockname_socklen_type *);],,dnl
+  [ac_not_found=no ; break], ac_not_found=yes)
+ done
+])dnl AC_CACHE_VAL
+if test "$ac_not_found" = yes; then
+ ac_cv_func_getsockname_socklen_type='socklen_t'
+fi
+AC_MSG_RESULT([$ac_cv_func_getsockname_socklen_type])
+AC_DEFINE_UNQUOTED([GETSOCKNAME_SOCKLEN_TYPE],
+                  $ac_cv_func_getsockname_socklen_type,
+                  [What is getsockname()'s socklen type?])
+
 AC_CHECK_FUNCS(getrusage)
 AC_CHECK_FUNC(gettimeofday, ,[
 case "$host" in
index 64381b9d4f3ac9b1d50d027e20586587508ff9f9..19ef684bc597200ac7a2eba6f41fd7b61eb3880d 100644 (file)
@@ -77,13 +77,13 @@ try_proto(int domain) {
 #ifdef ISC_PLATFORM_HAVEIN6PKTINFO
        if (domain == PF_INET6) {
                struct sockaddr_in6 sin6;
-               unsigned int len;
+               GETSOCKNAME_SOCKLEN_TYPE len;
 
                /*
                 * Check to see if IPv6 is broken, as is common on Linux.
                 */
                len = sizeof(sin6);
-               if (getsockname(s, (struct sockaddr *)&sin6, (void *)&len) < 0)
+               if (getsockname(s, (struct sockaddr *)&sin6, &len) < 0)
                {
                        result = ISC_R_NOTFOUND;
                } else {
index 21736d33f72628e284503950430ebf485ae9d08f..4057b4df12c05651519f77dfdfec920d4b8459d6 100644 (file)
@@ -3144,7 +3144,7 @@ findlocalinterface(
        int rtn;
        struct interface *interface;
        struct sockaddr_storage saddr;
-       socklen_t saddrlen = SOCKLEN(addr);
+       GETSOCKNAME_SOCKLEN_TYPE saddrlen = SOCKLEN(addr);
 
        DPRINTF(4, ("Finding interface for addr %s in list of addresses\n",
                    stoa(addr));)