Module Name: src
Committed By: joerg
Date: Fri Jun 13 16:04:41 UTC 2014
Modified Files:
src/usr.sbin/ifmcstat: ifmcstat.c
Log Message:
Use asysctl.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/ifmcstat/ifmcstat.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/ifmcstat/ifmcstat.c
diff -u src/usr.sbin/ifmcstat/ifmcstat.c:1.18 src/usr.sbin/ifmcstat/ifmcstat.c:1.19
--- src/usr.sbin/ifmcstat/ifmcstat.c:1.18 Wed Jun 11 14:05:28 2014
+++ src/usr.sbin/ifmcstat/ifmcstat.c Fri Jun 13 16:04:41 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: ifmcstat.c,v 1.18 2014/06/11 14:05:28 joerg Exp $ */
+/* $NetBSD: ifmcstat.c,v 1.19 2014/06/13 16:04:41 joerg Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -29,7 +29,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: ifmcstat.c,v 1.18 2014/06/11 14:05:28 joerg Exp $");
+__RCSID("$NetBSD: ifmcstat.c,v 1.19 2014/06/13 16:04:41 joerg Exp $");
#include <err.h>
#include <errno.h>
@@ -100,31 +100,6 @@ main(void)
/*NOTREACHED*/
}
-static void *
-fetch_sysctl(size_t *len, const int oids[], size_t oidlen, const char *msg)
-{
- void *data;
-
- *len = 0;
- data = NULL;
-
- for (;;) {
- if (sysctl(oids, oidlen, data, len, NULL, 0) == 0) {
- if (data != NULL || len == 0)
- return data;
- errno = ENOMEM;
- }
- free(data);
- if (errno == ENOMEM) {
- data = emalloc(*len);
- continue;
- }
- if (errno != ENODEV)
- warn("%s", msg);
- return NULL;
- }
-}
-
static void
print_hwaddr(const uint8_t *hwaddr, size_t len)
{
@@ -157,18 +132,25 @@ print_ether_mcast(u_short ifindex)
}
sdl_oids[2] = ifindex;
- hwaddr = fetch_sysctl(&sdl_len, sdl_oids, 3, "failed to read net.sdl");
+ hwaddr = asysctl(sdl_oids, 3, &sdl_len);
if (sdl_len == 0) {
free(hwaddr);
return;
}
+ if (hwaddr == NULL) {
+ warn("failed to read net.sdl");
+ }
ems_oids[3] = ifindex;
- ems = fetch_sysctl(&ems_len, ems_oids, 4,
- "failed to read net.ether.multicast");
+ ems = asysctl(ems_oids, 4, &ems_len);
ems_len /= sizeof(*ems);
+ if (ems == NULL && ems_len != 0) {
+ warn("failed to read net.ether.multicast");
+ return;
+ }
+
printf("\tenaddr ");
print_hwaddr(hwaddr, sdl_len);
printf(" multicnt %zu\n", ems_len);
@@ -214,8 +196,11 @@ print_inet6_mcast(u_short ifindex, const
mcast_oids[3] = ifindex;
kludge_oids[3] = ifindex;
- mcast_addrs = fetch_sysctl(&len, mcast_oids, 4,
- "failed to read net.inet6.multicast");
+ mcast_addrs = asysctl(mcast_oids, 4, &len);
+ if (mcast_addrs == NULL && len != 0) {
+ warn("failed to read net.inet6.multicast");
+ return;
+ }
if (len) {
p = mcast_addrs;
last_p = NULL;
@@ -236,8 +221,11 @@ print_inet6_mcast(u_short ifindex, const
}
free(mcast_addrs);
- kludge_addrs = fetch_sysctl(&len, kludge_oids, 4,
- "failed to read net.inet6.multicast_kludge");
+ kludge_addrs = asysctl(kludge_oids, 4, &len);
+ if (kludge_addrs == NULL && len != 0) {
+ warn("failed to read net.inet6.multicast_kludge");
+ return;
+ }
if (len) {
printf("\t(on kludge entry for %s)\n", ifname);
p = kludge_addrs;