2002-09-01 Roland McGrath <roland@redhat.com>
[kopensolaris-gnu/glibc.git] / nss / test-netdb.c
index f527240..a701b49 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998,99,2000,01 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1998.
 
@@ -40,6 +40,7 @@
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <unistd.h>
+#include <errno.h>
 #include "nss.h"
 
 /*
@@ -138,8 +139,8 @@ static void
 test_hosts (void)
 {
   struct hostent *hptr1, *hptr2;
-  char name[MAXHOSTNAMELEN];
-  size_t namelen = sizeof(name);
+  char *name = NULL;
+  size_t namelen = 0;
   struct in_addr ip;
 
   hptr1 = gethostbyname ("localhost");
@@ -176,15 +177,23 @@ test_hosts (void)
   hptr1 = gethostbyname2 ("localhost", AF_INET);
   output_hostent ("gethostbyname2 (\"localhost\", AF_INET)", hptr1);
 
+  while (gethostname (name, namelen) < 0 && errno == ENAMETOOLONG)
+    {
+      namelen += 2;            /* tiny increments to test a lot */
+      name = realloc (name, namelen);
+    }
   if (gethostname (name, namelen) == 0)
     {
       printf ("Hostname: %s\n", name);
-      hptr1 = gethostbyname (name);
-      output_hostent ("gethostbyname (gethostname(...))", hptr1);
+      if (name != NULL)
+       {
+         hptr1 = gethostbyname (name);
+         output_hostent ("gethostbyname (gethostname(...))", hptr1);
+       }
     }
 
   ip.s_addr = htonl (INADDR_LOOPBACK);
-  hptr1 = gethostbyaddr ((char *)&ip, sizeof(ip), AF_INET);
+  hptr1 = gethostbyaddr ((char *) &ip, sizeof(ip), AF_INET);
   if (hptr1 != NULL)
     {
       printf ("official name of 127.0.0.1: %s\n", hptr1->h_name);