fdwalk should return 0 on an empty directory
[kopensolaris-gnu/glibc.git] / inet / test-ifaddrs.c
index 42fb7e7..0d30d05 100644 (file)
@@ -1,5 +1,5 @@
 /* Test listing of network interface addresses.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
-int
-main (void)
+static int failures;
+
+static const char *
+addr_string (struct sockaddr *sa, char *buf, size_t size)
+{
+  if (sa == NULL)
+    return "<none>";
+
+  switch (sa->sa_family)
+    {
+    case AF_INET:
+      return inet_ntop (AF_INET, &((struct sockaddr_in *) sa)->sin_addr,
+                       buf, size);
+    case AF_INET6:
+      return inet_ntop (AF_INET6, &((struct sockaddr_in6 *) sa)->sin6_addr,
+                       buf, size);
+#ifdef AF_LINK
+    case AF_LINK:
+      return "<link>";
+#endif
+    case AF_UNSPEC:
+      return "---";
+
+#ifdef AF_PACKET
+    case AF_PACKET:
+      return "<packet>";
+#endif
+
+    default:
+      ++failures;
+      printf ("sa_family=%d %08x\n", sa->sa_family,
+             *(int*)&((struct sockaddr_in *) sa)->sin_addr.s_addr);
+      return "<unexpected sockaddr family>";
+    }
+}
+
+
+static int
+do_test (void)
 {
-  int failures = 0;
   struct ifaddrs *ifaces, *ifa;
 
   if (getifaddrs (&ifaces) < 0)
@@ -48,35 +84,17 @@ Name           Flags   Address         Netmask         Broadcast/Destination");
   for (ifa = ifaces; ifa != NULL; ifa = ifa->ifa_next)
     {
       char abuf[64], mbuf[64], dbuf[64];
-      inline const char *addr_string (struct sockaddr *sa, char *buf)
-       {
-         switch (sa->sa_family)
-           {
-           case AF_INET:
-             return inet_ntop (AF_INET,
-                               &((struct sockaddr_in *) sa)->sin_addr,
-                               buf, sizeof abuf);
-           case AF_INET6:
-             return inet_ntop (AF_INET6,
-                               &((struct sockaddr_in6 *) sa)->sin6_addr,
-                               buf, sizeof abuf);
-           case AF_UNSPEC:
-             return "---";
-           default:
-             ++failures;
-             printf ("sa_family=%d %08x\n", sa->sa_family,
-                     *(int*)&((struct sockaddr_in *) sa)->sin_addr.s_addr);
-             return "<unexpected sockaddr family>";
-           }
-       }
       printf ("%-15s%#.4x  %-15s %-15s %-15s\n",
              ifa->ifa_name, ifa->ifa_flags,
-             addr_string (ifa->ifa_addr, abuf),
-             addr_string (ifa->ifa_netmask, mbuf),
-             addr_string (ifa->ifa_broadaddr, dbuf));
+             addr_string (ifa->ifa_addr, abuf, sizeof (abuf)),
+             addr_string (ifa->ifa_netmask, mbuf, sizeof (mbuf)),
+             addr_string (ifa->ifa_broadaddr, dbuf, sizeof (dbuf)));
     }
 
   freeifaddrs (ifaces);
 
   return failures ? 1 : 0;
 }
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"