diff --git a/wmnet/drivers.c b/wmnet/drivers.c index 4b798e7..a6ab0a0 100644 --- a/wmnet/drivers.c +++ b/wmnet/drivers.c @@ -316,36 +316,25 @@ int updateStats_ipchains(void) { int updateStats_dev(void) { FILE *dev; - char *ptr; - unsigned int flag = 0; - static char interface[16]; rx = False; tx = False; - - if ((dev = fopen("/proc/net/dev", "r")) == NULL) { - fprintf(stderr, "/proc/net/dev does not exist?\n" - "Perhaps we are not running Linux?\n"); + dev = fopen("/proc/net/dev", "r"); + if (!dev) { + fprintf(stderr, "/proc/net/dev does not exist\n"); exit(4); } + /* the first two lines we can skip */ fgets(buffer, 256, dev); fgets(buffer, 256, dev); - /* IP Chain Rules for Linux kernel 2_1.x */ - while(flag != (ACCOUNT_IN_FOUND|ACCOUNT_OUT_FOUND) && fgets(buffer, 256, dev)) { + while(fgets(buffer, 256, dev)) { - sscanf(buffer, "%16s %llu %llu %*d %*d %*d %*d %*d %*d %llu %llu %*d %*d %*d %*d %*d %*d", - interface, &totalbytes_in, &totalpackets_in, &totalbytes_out, &totalpackets_out); + if (strcmp(buffer, device) > 0){ - /* strip trailing colon */ - ptr = interface; - while(*ptr != ':') ptr++; - *ptr = '\0'; - - if (!strcmp(interface, device)) { - - flag = (ACCOUNT_IN_FOUND|ACCOUNT_OUT_FOUND); + sscanf(buffer, "%*s %llu %llu %*d %*d %*d %*d %*d %*d %llu %llu %*d %*d %*d %*d %*d %*d", + &totalbytes_in, &totalpackets_in, &totalbytes_out, &totalpackets_out); if (totalpackets_in != lastpackets_in) { diffbytes_in += totalbytes_in - lastbytes_in; @@ -360,6 +349,8 @@ int updateStats_dev(void) { lastbytes_out = totalbytes_out; tx = True; } + + break; } }