From 168786cfcf76ad671bac53e129a52523b804801c Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Fri, 12 Mar 2004 00:16:38 +0000 Subject: [PATCH] Test getaddrinfo() for brokenness. Pretend it doesn't exist if it misbehaves. --- configure.in | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 17b145f33c..6caada3f87 100644 --- a/configure.in +++ b/configure.in @@ -521,10 +521,45 @@ vsnprintf \ ) dnl Check for getaddrinfo, should be a better way, but... +dnl Also check for working getaddrinfo AC_CACHE_CHECK([for getaddrinfo], ac_cv_func_getaddrinfo, [AC_TRY_LINK([#include ], - [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], - ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no)]) + [struct addrinfo *g,h;g=&h;getaddrinfo("","",g,&g);], + AC_TRY_RUN([ +#include +#include +int main(void) { + struct addrinfo *ai, *pai, hints; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + + if (getaddrinfo("127.0.0.1", NULL, &hints, &ai) < 0) { + exit(1); + } + + if (ai == NULL) { + exit(1); + } + + pai = ai; + + while (pai) { + if (pai->ai_family != AF_INET) { + /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ + exit(1); + } + if (pai->ai_addr->sa_family != AF_INET) { + /* 127.0.0.1/NUMERICHOST should only resolve ONE way */ + exit(1); + } + pai = pai->ai_next; + } + freeaddrinfo(ai); + exit(0); +} + ],ac_cv_func_getaddrinfo=yes, ac_cv_func_getaddrinfo=no), +ac_cv_func_getaddrinfo=no)]) if test "$ac_cv_func_getaddrinfo" = yes; then AC_DEFINE(HAVE_GETADDRINFO,1,[Define if you have the getaddrinfo function]) fi -- 2.50.1