summaryrefslogtreecommitdiffstats
path: root/usr.bin/systat/ifstat.c
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2008-01-12 00:11:26 +0000
committerdelphij <delphij@FreeBSD.org>2008-01-12 00:11:26 +0000
commit3f4eb439e29a73b7acefee30e2c2c48c3f48872f (patch)
treeb194c0dc3dad651c27ce93be56247e706d632f34 /usr.bin/systat/ifstat.c
parent41560caefda371e018be6f679ded9c36742c2360 (diff)
downloadFreeBSD-src-3f4eb439e29a73b7acefee30e2c2c48c3f48872f.zip
FreeBSD-src-3f4eb439e29a73b7acefee30e2c2c48c3f48872f.tar.gz
- Handle the case where interface from "middle" is missing by
more carefully inspecting the return value from sysctl(3). [1] - Use calloc instead of malloc+memset of zero. Submitted by: Alexander Chernikov <admin su29 net> [1] PR: bin/119581 MFC after: 2 weeks
Diffstat (limited to 'usr.bin/systat/ifstat.c')
-rw-r--r--usr.bin/systat/ifstat.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/usr.bin/systat/ifstat.c b/usr.bin/systat/ifstat.c
index 27bf9ec..62773e9 100644
--- a/usr.bin/systat/ifstat.c
+++ b/usr.bin/systat/ifstat.c
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include <string.h>
#include <err.h>
+#include <errno.h>
#include "systat.h"
#include "extern.h"
@@ -210,10 +211,9 @@ initifstat(void)
SLIST_INIT(&curlist);
for (i = 0; i < n; i++) {
- p = (struct if_stat *)malloc(sizeof(struct if_stat));
+ p = (struct if_stat *)calloc(1, sizeof(struct if_stat));
if (p == NULL)
IFSTAT_ERR(1, "out of memory");
- memset((void *)p, 0, sizeof(struct if_stat));
SLIST_INSERT_HEAD(&curlist, p, link);
p->if_row = i+1;
getifmibdata(p->if_row, &p->if_mib);
@@ -384,8 +384,8 @@ getifmibdata(int row, struct ifmibdata *data)
datalen = sizeof(*data);
name[4] = row;
- if (sysctl(name, 6, (void *)data, (size_t *)&datalen, (void *)NULL,
- (size_t)0) != 0)
+ if ((sysctl(name, 6, (void *)data, (size_t *)&datalen, (void *)NULL,
+ (size_t)0) != 0) && (errno != ENOENT))
IFSTAT_ERR(2, "sysctl error getting interface data");
}
OpenPOWER on IntegriCloud