diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/posix/getaddrinfo.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index 4af40f92ad..dd6e4155a1 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -570,25 +570,28 @@ gaih_inet (const char *name, const struct gaih_service *service, { fct = __nss_lookup_function (nip, "gethostbyname2_r"); - gethosts2 (AF_INET6, struct in6_addr); - no_inet6_data = no_data; - inet6_status = status; - gethosts2 (AF_INET, struct in_addr); - - /* If we found one address for AF_INET or AF_INET6, - don't continue the search. */ - if (inet6_status == NSS_STATUS_SUCCESS || - status == NSS_STATUS_SUCCESS) - break; - - /* We can have different states for AF_INET - and AF_INET6. Try to find a usefull one for - both. */ - if (inet6_status == NSS_STATUS_TRYAGAIN) - status = NSS_STATUS_TRYAGAIN; - else if (status == NSS_STATUS_UNAVAIL && - inet6_status != NSS_STATUS_UNAVAIL) - status = inet6_status; + if (fct != NULL) + { + gethosts2 (AF_INET6, struct in6_addr); + no_inet6_data = no_data; + inet6_status = status; + gethosts2 (AF_INET, struct in_addr); + + /* If we found one address for AF_INET or AF_INET6, + don't continue the search. */ + if (inet6_status == NSS_STATUS_SUCCESS || + status == NSS_STATUS_SUCCESS) + break; + + /* We can have different states for AF_INET + and AF_INET6. Try to find a usefull one for + both. */ + if (inet6_status == NSS_STATUS_TRYAGAIN) + status = NSS_STATUS_TRYAGAIN; + else if (status == NSS_STATUS_UNAVAIL && + inet6_status != NSS_STATUS_UNAVAIL) + status = inet6_status; + } if (nss_next_action (nip, status) == NSS_ACTION_RETURN) break; |