From: Harlan Stenn Date: Tue, 10 Oct 2006 23:52:42 +0000 (-0400) Subject: [Bug 718] Determine/use the correct type of saddrlen for getsockname() X-Git-Tag: NTP_4_2_3P55~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74af4f3ec4571749a56681b59371931a92da9cde;p=thirdparty%2Fntp.git [Bug 718] Determine/use the correct type of saddrlen for getsockname() bk: 452c324aWS9xcYl9riME6RMi9kf6LA --- diff --git a/configure.ac b/configure.ac index 7f11a8510..3f1f82498 100644 --- a/configure.ac +++ b/configure.ac @@ -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 #include ], @@ -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 +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#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 diff --git a/libisc/net.c b/libisc/net.c index 64381b9d4..19ef684bc 100644 --- a/libisc/net.c +++ b/libisc/net.c @@ -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 { diff --git a/ntpd/ntp_io.c b/ntpd/ntp_io.c index 21736d33f..4057b4df1 100644 --- a/ntpd/ntp_io.c +++ b/ntpd/ntp_io.c @@ -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));)