about summary refs log tree commit diff
path: root/sysdeps/posix
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/posix')
-rw-r--r--sysdeps/posix/getaddrinfo.c41
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;