diff options
Diffstat (limited to 'inet')
-rw-r--r-- | inet/test-ifaddrs.c | 76 |
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); |