about summary refs log tree commit diff
path: root/inet/test-ifaddrs.c
diff options
context:
space:
mode:
Diffstat (limited to 'inet/test-ifaddrs.c')
-rw-r--r--inet/test-ifaddrs.c76
1 files changed, 39 insertions, 37 deletions
diff --git a/inet/test-ifaddrs.c b/inet/test-ifaddrs.c
index 5057fac1ad..185859e323 100644
--- a/inet/test-ifaddrs.c
+++ b/inet/test-ifaddrs.c
@@ -1,5 +1,5 @@
 /* Test listing of network interface addresses.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004 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
@@ -25,10 +25,44 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
+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 "---";
+
+    case AF_PACKET:
+      return "<packet>";
+
+    default:
+      ++failures;
+      printf ("sa_family=%d %08x\n", sa->sa_family,
+	      *(int*)&((struct sockaddr_in *) sa)->sin_addr.s_addr);
+      return "<unexpected sockaddr family>";
+    }
+}
+
+
 int
 main (void)
 {
-  int failures = 0;
   struct ifaddrs *ifaces, *ifa;
 
   if (getifaddrs (&ifaces) < 0)
@@ -48,43 +82,11 @@ 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)
-	{
-	  if (sa == NULL)
-	    return "<none>";
-
-	  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);
-#ifdef AF_LINK
-	    case AF_LINK:
-	      return "<link>";
-#endif
-	    case AF_UNSPEC:
-	      return "---";
-
-	    case AF_PACKET:
-	      return "<packet>";
-
-	    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);