diff options
-rwxr-xr-x | configure | 115 | ||||
-rw-r--r-- | configure.ac | 18 | ||||
-rw-r--r-- | include/asterisk/autoconfig.h.in | 7 | ||||
-rw-r--r-- | main/utils.c | 4 |
4 files changed, 88 insertions, 56 deletions
@@ -14643,56 +14643,73 @@ done # some systems already have gethostbyname_r so we don't need to build ours in main/utils.c - -for ac_func in gethostbyname_r -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF +{ echo "$as_me:$LINENO: checking for gethostbyname_r with 6 arguments" >&5 +echo $ECHO_N "checking for gethostbyname_r with 6 arguments... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $ac_func innocuous_$ac_func +#include <netdb.h> +int +main () +{ +struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (struct hostent **)NULL, (int *)NULL); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETHOSTBYNAME_R_6 1 +_ACEOF -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -#undef $ac_func + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif +fi +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +{ echo "$as_me:$LINENO: checking for gethostbyname_r with 5 arguments" >&5 +echo $ECHO_N "checking for gethostbyname_r with 5 arguments... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <netdb.h> int main () { -return $ac_func (); +struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (int *)NULL); ; return 0; } @@ -14715,28 +14732,24 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETHOSTBYNAME_R_5 1 +_ACEOF + else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } + fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - { echo "$as_me:$LINENO: checking for PTHREAD_RWLOCK_INITIALIZER" >&5 echo $ECHO_N "checking for PTHREAD_RWLOCK_INITIALIZER... $ECHO_C" >&6; } diff --git a/configure.ac b/configure.ac index ec0ec155e..a886ae627 100644 --- a/configure.ac +++ b/configure.ac @@ -262,7 +262,23 @@ AC_FUNC_VPRINTF AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent floor ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap pow putenv re_comp regcomp rint select setenv socket sqrt strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf]) # some systems already have gethostbyname_r so we don't need to build ours in main/utils.c -AC_CHECK_FUNCS([gethostbyname_r]) +AC_MSG_CHECKING(for gethostbyname_r with 6 arguments) +AC_LINK_IFELSE( + AC_LANG_PROGRAM([#include <netdb.h>], + [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (struct hostent **)NULL, (int *)NULL);]), + AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_GETHOSTBYNAME_R_6], 1, [Define to 1 if your system has gethostbyname_r with 6 arguments.]), + AC_MSG_RESULT(no) +) + +AC_MSG_CHECKING(for gethostbyname_r with 5 arguments) +AC_LINK_IFELSE( + AC_LANG_PROGRAM([#include <netdb.h>], + [struct hostent *he = gethostbyname_r((const char *)NULL, (struct hostent *)NULL, (char *)NULL, (int)0, (int *)NULL);]), + AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_GETHOSTBYNAME_R_5], 1, [Define to 1 if your system has gethostbyname_r with 5 arguments.]), + AC_MSG_RESULT(no) +) AC_MSG_CHECKING(for PTHREAD_RWLOCK_INITIALIZER) AC_LINK_IFELSE( diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index f83a1d2b1..a908912d6 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -108,8 +108,11 @@ /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME -/* Define to 1 if you have the `gethostbyname_r' function. */ -#undef HAVE_GETHOSTBYNAME_R +/* Define to 1 if your system has gethostbyname_r with 5 arguments. */ +#undef HAVE_GETHOSTBYNAME_R_5 + +/* Define to 1 if your system has gethostbyname_r with 6 arguments. */ +#undef HAVE_GETHOSTBYNAME_R_6 /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME diff --git a/main/utils.c b/main/utils.c index 7d2418457..e85618048 100644 --- a/main/utils.c +++ b/main/utils.c @@ -67,7 +67,7 @@ static char b2a[256]; AST_THREADSTORAGE(inet_ntoa_buf, inet_ntoa_buf_init); -#if !defined(HAVE_GETHOSTBYNAME_R) +#if !defined(HAVE_GETHOSTBYNAME_R_5) && !defined(HAVE_GETHOSTBYNAME_R_6) #define ERANGE 34 /*!< duh? ERANGE value copied from web... */ #undef gethostbyname @@ -212,7 +212,7 @@ struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp) return NULL; } -#ifdef SOLARIS +#ifdef HAVE_GETHOSTBYNAME_R5 result = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &herrno); if (!result || !hp->hp.h_addr_list || !hp->hp.h_addr_list[0]) |