فهرست منبع

netspeeds: added error condition for openbsd

implemented additional error condition for openbsd netstat in case the
interface could not be found in the interface list or if_data is not
readable.
Tobias Tschinkowitz 7 سال پیش
والد
کامیت
2321aecff0
1فایلهای تغییر یافته به همراه12 افزوده شده و 2 حذف شده
  1. 12 2
      components/netspeeds.c

+ 12 - 2
components/netspeeds.c

@@ -64,6 +64,7 @@
 		uint64_t rxbytes = 0;
 		const char *rxs;
 		extern const unsigned int interval;
+		char if_ok = 0;
 
 		if (getifaddrs(&ifal) == -1) {
 			warn("getifaddrs failed");
@@ -72,10 +73,14 @@
 		for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
 			if (!strcmp(ifa->ifa_name, interface) &&
 			   (ifd = (struct if_data *)ifa->ifa_data)) {
-				rxbytes += ifd->ifi_ibytes;
+				rxbytes += ifd->ifi_ibytes, if_ok = 1;
 			}
 		}
 		freeifaddrs(ifal);
+		if (!if_ok) {
+			warn("reading 'if_data' failed");
+			return NULL;
+		}
 
 		rxs = oldrxbytes ? fmt_scaled((rxbytes - oldrxbytes) /
 		                              interval * 1000) : NULL;
@@ -91,6 +96,7 @@
 		uint64_t txbytes = 0;
 		const char *txs;
 		extern const unsigned int interval;
+		char if_ok = 0;
 
 		if (getifaddrs(&ifal) == -1) {
 			warn("getifaddrs failed");
@@ -99,10 +105,14 @@
 		for (ifa = ifal; ifa; ifa = ifa->ifa_next) {
 			if (!strcmp(ifa->ifa_name, interface) &&
 			   (ifd = (struct if_data *)ifa->ifa_data)) {
-				txbytes += ifd->ifi_obytes;
+				txbytes += ifd->ifi_obytes, if_ok = 1;
 			}
 		}
 		freeifaddrs(ifal);
+		if (!if_ok) {
+			warn("reading 'if_data' failed");
+			return NULL;
+		}
 
 		txs = oldtxbytes ? fmt_scaled((txbytes - oldtxbytes) /
 		                              interval * 1000) : NULL;