From: Todd C. Miller Date: Sun, 1 Aug 2010 00:18:48 +0000 (-0400) Subject: Use AC_CHECK_MEMBER in SUDO_SOCK_SA_LEN X-Git-Tag: SUDO_1_7_5~215 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6cf055de2b3c1ae036e64ff4a8698edc549daa94;p=sudo Use AC_CHECK_MEMBER in SUDO_SOCK_SA_LEN Use AC_TYPE_LONG_LONG_INT and AC_CHECK_SIZEOF([long int]) instead of rolling our own. --HG-- branch : 1.7 --- diff --git a/aclocal.m4 b/aclocal.m4 index 5bbb4ac13..8d0cc2701 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -253,24 +253,14 @@ int putenv(const char *string) {return 0;}], [])], dnl dnl check for sa_len field in struct sockaddr dnl -AC_DEFUN(SUDO_SOCK_SA_LEN, -[AC_MSG_CHECKING(for sa_len field in struct sockaddr) -AC_CACHE_VAL(sudo_cv_sock_sa_len, -[AC_TRY_RUN([#include -#include -main() { -struct sockaddr s; -s.sa_len = 0; -exit(0); -}], sudo_cv_sock_sa_len=yes, sudo_cv_sock_sa_len=no, - sudo_cv_sock_sa_len=no) -rm -f core core.* *.core])dnl -AC_MSG_RESULT($sudo_cv_sock_sa_len) -if test $sudo_cv_sock_sa_len = yes; then - AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.]) -fi -]) - +AC_DEFUN(SUDO_SOCK_SA_LEN, [ + AC_CHECK_MEMBER([struct sockaddr.sa_len], + [AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])], + [], + [ #include + #include ] + )] +) dnl dnl check for max length of uid_t in string representation. dnl we can't really trust UID_MAX or MAXUID since they may exist @@ -306,26 +296,6 @@ AC_MSG_RESULT($sudo_cv_uid_t_len) AC_DEFINE_UNQUOTED(MAX_UID_T_LEN, $sudo_cv_uid_t_len, [Define to the max length of a uid_t in string context (excluding the NUL).]) ]) -dnl -dnl Check for presence of long long and for sizeof(long long) == sizeof(long) -dnl -AC_DEFUN(SUDO_TYPE_LONG_LONG, -[AC_CHECK_TYPES(long long, [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])] -[AC_MSG_CHECKING(for long and long long equivalence) -AC_CACHE_VAL(sudo_cv_type_long_is_quad, -[AC_TRY_RUN([ -main() { -if (sizeof(long long) == sizeof(long)) exit(0); -else exit(1); -}], [sudo_cv_type_long_is_quad=yes], -[sudo_cv_type_long_is_quad=no], [sudo_cv_type_long_is_quad=no]) -rm -f core core.* *.core])dnl -AC_MSG_RESULT($sudo_cv_type_long_is_quad) -if test $sudo_cv_type_long_is_quad = yes; then - AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).]) -fi -])]) - dnl dnl append a libpath to an LDFLAGS style variable dnl diff --git a/config.h.in b/config.h.in index 7c70f7f5a..af5653b6d 100644 --- a/config.h.in +++ b/config.h.in @@ -310,8 +310,8 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LOGIN_CAP_H -/* Define if your compiler supports the "long long" type. */ -#undef HAVE_LONG_LONG +/* Define to 1 if the system has the type `long long int'. */ +#undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `lrand48' function. */ #undef HAVE_LRAND48 @@ -616,9 +616,6 @@ /* Define to SLOG_SYSLOG, SLOG_FILE, or SLOG_BOTH. */ #undef LOGGING -/* Define if sizeof(long) == sizeof(long long). */ -#undef LONG_IS_QUAD - /* Define to 1 if you want a two line OTP (S/Key or OPIE) prompt. */ #undef LONG_OTP_PROMPT @@ -723,6 +720,9 @@ /* Define to 1 if you want sudo to set $HOME in shell mode. */ #undef SHELL_SETS_HOME +/* The size of `long int', as computed by sizeof. */ +#undef SIZEOF_LONG_INT + /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS diff --git a/configure b/configure index 45c29379e..b3d859109 100755 --- a/configure +++ b/configure @@ -2250,16 +2250,57 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_type -# ac_fn_c_check_decl LINENO SYMBOL VAR -# ------------------------------------ -# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. -ac_fn_c_check_decl () +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 -$as_echo_n "checking whether $2 is declared... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -2267,27 +2308,125 @@ $4 int main () { -#ifndef $2 - (void) $2; -#endif +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break else - eval "$3=no" + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_member + +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -6584,13 +6762,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:6587: $ac_compile\"" >&5) + (eval echo "\"\$as_me:6765: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:6590: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:6768: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:6593: output\"" >&5) + (eval echo "\"\$as_me:6771: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -7795,7 +7973,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 7798 "configure"' > conftest.$ac_ext + echo '#line 7976 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -9188,11 +9366,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9191: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9369: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9195: \$? = $ac_status" >&5 + echo "$as_me:9373: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9527,11 +9705,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9530: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9708: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9534: \$? = $ac_status" >&5 + echo "$as_me:9712: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9632,11 +9810,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9635: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9813: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9639: \$? = $ac_status" >&5 + echo "$as_me:9817: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9687,11 +9865,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9690: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9868: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9694: \$? = $ac_status" >&5 + echo "$as_me:9872: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12054,7 +12232,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12057 "configure" +#line 12235 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12150,7 +12328,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12153 "configure" +#line 12331 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14099,6 +14277,131 @@ $as_echo "#define HAVE_IN6_ADDR 1" >>confdefs.h fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if test "${ac_cv_type_long_long_int+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if test "$cross_compiling" = yes; then : + ac_cv_type_long_long_int=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main () +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_type_long_long_int=yes +else + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + ac_cv_type_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long int" >&5 +$as_echo_n "checking size of long int... " >&6; } +if test "${ac_cv_sizeof_long_int+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long int))" "ac_cv_sizeof_long_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_int" >&5 +$as_echo "$ac_cv_sizeof_long_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_INT $ac_cv_sizeof_long_int +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for size_t" >&5 $as_echo_n "checking for size_t... " >&6; } if test "${sudo_cv_type_size_t+set}" = set; then : @@ -14286,90 +14589,18 @@ cat >>confdefs.h <<_ACEOF _ACEOF -ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" -if test "x$ac_cv_type_long_long" = x""yes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_LONG 1 -_ACEOF + ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" " #include + #include -$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long and long long equivalence" >&5 -$as_echo_n "checking for long and long long equivalence... " >&6; } -if test "${sudo_cv_type_long_is_quad+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - sudo_cv_type_long_is_quad=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -main() { -if (sizeof(long long) == sizeof(long)) exit(0); -else exit(1); -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - sudo_cv_type_long_is_quad=yes -else - sudo_cv_type_long_is_quad=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -rm -f core core.* *.core -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_type_long_is_quad" >&5 -$as_echo "$sudo_cv_type_long_is_quad" >&6; } -if test $sudo_cv_type_long_is_quad = yes; then - -$as_echo "#define LONG_IS_QUAD 1" >>confdefs.h - -fi - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sa_len field in struct sockaddr" >&5 -$as_echo_n "checking for sa_len field in struct sockaddr... " >&6; } -if test "${sudo_cv_sock_sa_len+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - sudo_cv_sock_sa_len=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -main() { -struct sockaddr s; -s.sa_len = 0; -exit(0); -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - sudo_cv_sock_sa_len=yes -else - sudo_cv_sock_sa_len=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -rm -f core core.* *.core -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_sock_sa_len" >&5 -$as_echo "$sudo_cv_sock_sa_len" >&6; } -if test $sudo_cv_sock_sa_len = yes; then +" +if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then : $as_echo "#define HAVE_SA_LEN 1" >>confdefs.h fi + case "$DEFS" in *"RETSIGTYPE"*) ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 diff --git a/configure.in b/configure.in index f54eb79d1..fce5fbd0c 100644 --- a/configure.in +++ b/configure.in @@ -1891,12 +1891,13 @@ AC_CHECK_TYPE([struct timespec], [AC_DEFINE(HAVE_TIMESPEC)], [], [#include ]) AC_CHECK_TYPES([struct in6_addr], [AC_DEFINE(HAVE_IN6_ADDR)], [], [#include #include ]) +AC_TYPE_LONG_LONG_INT +AC_CHECK_SIZEOF([long int]) SUDO_TYPE_SIZE_T SUDO_TYPE_SSIZE_T SUDO_TYPE_DEV_T SUDO_TYPE_INO_T SUDO_UID_T_LEN -SUDO_TYPE_LONG_LONG SUDO_SOCK_SA_LEN dnl dnl only set RETSIGTYPE if it is not set already diff --git a/snprintf.c b/snprintf.c index 27757f95f..4123a9d77 100644 --- a/snprintf.c +++ b/snprintf.c @@ -89,7 +89,7 @@ static int xxxprintf __P((char **, size_t, int, const char *, va_list)); #ifndef LONG_MAX # define LONG_MAX (ULONG_MAX / 2) #endif -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT # ifndef ULLONG_MAX # ifdef UQUAD_MAX # define ULLONG_MAX UQUAD_MAX @@ -104,7 +104,7 @@ static int xxxprintf __P((char **, size_t, int, const char *, va_list)); # define LLONG_MAX (ULLONG_MAX / 2) # endif # endif -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ /* * Macros for converting digits to letters and vice versa @@ -212,8 +212,8 @@ __ultoa(val, endp, base, octzero, xdigs) } /* Identical to __ultoa, but for quads. */ -#ifdef HAVE_LONG_LONG -# ifdef LONG_IS_QUAD +#ifdef HAVE_LONG_LONG_INT +# if SIZEOF_LONG_INT == 8 # define __uqtoa(v, e, b, o, x) __ultoa((unsigned long)(v), (e), (b), (o), (x)) # else static char * @@ -268,8 +268,8 @@ __uqtoa(val, endp, base, octzero, xdigs) } return (cp); } -# endif /* !LONG_IS_QUAD */ -#endif /* HAVE_LONG_LONG */ +# endif /* !SIZEOF_LONG_INT */ +#endif /* HAVE_LONG_LONG_INT */ /* * Actual printf innards. @@ -292,7 +292,7 @@ xxxprintf(strp, strsize, alloc, fmt0, ap) int prec; /* precision from format (%.3d), or -1 */ char sign; /* sign prefix (' ', '+', '-', or \0) */ unsigned long ulval; /* integer arguments %[diouxX] */ -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT unsigned long long uqval; /* %q (quad) integers */ #endif int base; /* base for [diouxX] conversion */ @@ -469,11 +469,11 @@ reswitch: switch (ch) { case 'l': flags |= LONGINT; goto rflag; -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT case 'q': flags |= QUADINT; goto rflag; -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ case 'c': *(cp = buf) = va_arg(ap, int); size = 1; @@ -484,7 +484,7 @@ reswitch: switch (ch) { /*FALLTHROUGH*/ case 'd': case 'i': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) { uqval = va_arg(ap, long long); if ((long long)uqval < 0) { @@ -493,7 +493,7 @@ reswitch: switch (ch) { } } else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ { ulval = SARG(); if ((long)ulval < 0) { @@ -504,11 +504,11 @@ reswitch: switch (ch) { base = 10; goto number; case 'n': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) *va_arg(ap, long long *) = ret; else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ if (flags & LONGINT) *va_arg(ap, long *) = ret; else if (flags & SHORTINT) @@ -520,11 +520,11 @@ reswitch: switch (ch) { flags |= LONGINT; /*FALLTHROUGH*/ case 'o': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 8; goto nosign; @@ -567,11 +567,11 @@ reswitch: switch (ch) { flags |= LONGINT; /*FALLTHROUGH*/ case 'u': -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 10; goto nosign; @@ -581,20 +581,20 @@ reswitch: switch (ch) { case 'x': xdigs = "0123456789abcdef"; hex: -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) uqval = va_arg(ap, unsigned long long); else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ ulval = UARG(); base = 16; /* leading 0x/X only if non-zero */ if (flags & ALT && -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT (flags & QUADINT ? uqval != 0 : ulval != 0)) #else ulval != 0) -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ flags |= HEXPREFIX; /* unsigned conversions */ @@ -613,14 +613,14 @@ number: if ((dprec = prec) >= 0) * -- ANSI X3J11 */ cp = buf + BUF; -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG_INT if (flags & QUADINT) { if (uqval != 0 || prec != 0) cp = __uqtoa(uqval, cp, base, flags & ALT, xdigs); } else -#endif /* HAVE_LONG_LONG */ +#endif /* HAVE_LONG_LONG_INT */ { if (ulval != 0 || prec != 0) cp = __ultoa(ulval, cp, base,