From: Harlan Stenn Date: Thu, 20 Nov 2008 07:07:09 +0000 (+0000) Subject: Handle ss_len and socklen type for sntp X-Git-Tag: NTP_4_2_5P145~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cc2e66ff7060ca775e37b1adccc24d51eb41050c;p=thirdparty%2Fntp.git Handle ss_len and socklen type for sntp bk: 49250c9dwKFVG-xZjta9gd2m094jIQ --- diff --git a/ChangeLog b/ChangeLog index 355620955..a47b2fda8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* Handle ss_len and socklen type for sntp. * Fixes to the sntp configure.ac script. * Provide INET6_ADDRSTRLEN if it is missing. * [Bug 1095] overflow in caljulian.c. diff --git a/gsoc_sntp/configure.ac b/gsoc_sntp/configure.ac index b3e0fc8c8..46ebf4ba9 100644 --- a/gsoc_sntp/configure.ac +++ b/gsoc_sntp/configure.ac @@ -85,6 +85,32 @@ case "$ac_cv_c_char_unsigned$ac_cv_sizeof_signed_char$ac_cv_type_s_char" in esac AC_TYPE_UID_T +AC_MSG_CHECKING([type of socklen arg for getsockname()]) +AC_CACHE_VAL(ac_cv_func_getsockname_arg2,dnl +[AC_CACHE_VAL(ac_cv_func_getsockname_socklen_type,dnl + [for ac_cv_func_getsockname_arg2 in 'struct sockaddr *' 'void *'; do + 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, $ac_cv_func_getsockname_arg2, $ac_cv_func_getsockname_socklen_type *);],,dnl + [ac_not_found=no ; break 2], ac_not_found=yes) + done + done + ])dnl AC_CACHE_VAL +])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_CACHE_CHECK(for struct sockaddr_storage, ac_cv_struct_sockaddr_storage, [AC_TRY_COMPILE([ #include @@ -99,6 +125,54 @@ if test $ac_cv_struct_sockaddr_storage = yes; then AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], 1, [Does a system header define struct sockaddr_storage?]) fi +AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage], + ac_cv_have_ss_family_in_struct_ss, [ + AC_TRY_COMPILE( + [ +#include +#include + ], + [ struct sockaddr_storage s; s.ss_family = 1; ], + [ ac_cv_have_ss_family_in_struct_ss="yes" ], + [ ac_cv_have_ss_family_in_struct_ss="no" ], + ) +]) +if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then + AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Does struct sockaddr_storage have ss_family?]) +else + # Hack around a problem... + # HMS: This is $host because we need the -D if we are building *for* it. + # HMS: 061029: Now that we separate the ss_* checks this is causing + # a problem - disable it until we get to the bottom of it. + case "$host" in + XXX*-*-hpux11.11) CPPFLAGS="$CPPFLAGS -D_NETINET_IN6_H" + ;; + esac +fi + +AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage], + ac_cv_have___ss_family_in_struct_ss, [ + AC_TRY_COMPILE( + [ +#include +#include + ], + [ struct sockaddr_storage s; s.__ss_family = 1; ], + [ ac_cv_have___ss_family_in_struct_ss="yes" ], + [ ac_cv_have___ss_family_in_struct_ss="no" ] + ) +]) +if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then + AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1, [Does struct sockaddr_storage have __ss_family?]) +fi + +AH_VERBATIM([X_HAVE_SS_FAMILY_IN_SS], +[/* Handle ss_family */ +#if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) +# define ss_family __ss_family +#endif /* !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE_SA_FAMILY_IN_SS) */]) + + AC_ARG_ENABLE([ipv6], [AC_HELP_STRING([--enable-ipv6], [s use IPv6?])]) case "$enable_ipv6" in