netspeeds: added error condition for openbsd
authorTobias Tschinkowitz <he4d@posteo.de>
Sat, 19 May 2018 09:23:16 +0000 (11:23 +0200)
committerAaron Marcher <me@drkhsh.at>
Sat, 19 May 2018 10:20:25 +0000 (12:20 +0200)
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.

components/netspeeds.c

index 9315feff23497788e627aa16743fa84ed3da2b58..c846a2caf325316060da02183b7af2a19aa7e8d6 100644 (file)
@@ -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");
                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");
                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;