]> git.webhop.me Git - lcd4linux.git/commitdiff
[lcd4linux @ 2000-08-09 11:03:07 by reinelt]
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Wed, 9 Aug 2000 11:03:07 +0000 (11:03 +0000)
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Wed, 9 Aug 2000 11:03:07 +0000 (11:03 +0000)
fixed a bug in system.c where the format of /proc/net/dev was not correctly
detected and parsed with different kernels

git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@62 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

system.c

index 97ea6ec36ae403fad7aafa0a741e6d8b9ea867d1..e0635438b84dd1fb258af74cf9cf0924201cc1ad 100644 (file)
--- a/system.c
+++ b/system.c
@@ -1,4 +1,4 @@
-/* $Id: system.c,v 1.14 2000/08/09 09:50:29 reinelt Exp $
+/* $Id: system.c,v 1.15 2000/08/09 11:03:07 reinelt Exp $
  *
  * system status retreivement
  *
  *
  *
  * $Log: system.c,v $
+ * Revision 1.15  2000/08/09 11:03:07  reinelt
+ *
+ * fixed a bug in system.c where the format of /proc/net/dev was not correctly
+ * detected and parsed with different kernels
+ *
  * Revision 1.14  2000/08/09 09:50:29  reinelt
  *
  * opened 0.98 development
@@ -548,6 +553,8 @@ int Disk (int *r, int *w)
 int Net (int *rx, int *tx, int *bytes)
 {
   char buffer[4096], *p, *s;
+  static char *proc_net_dev_fmt=NULL;
+  static int   proc_net_dev_bytes=0;
   static int fd=-2;
   unsigned long pkg_rx, pkg_tx;
   
@@ -558,6 +565,22 @@ int Net (int *rx, int *tx, int *bytes)
   if (fd==-1) return -1;
   
   if (fd==-2) {
+    struct utsname ubuf;
+    if (uname(&ubuf)==-1) {
+      perror ("uname() failed");
+      fd=-1;
+      return -1;
+    }
+    if (strncmp(ubuf.release,"2.0.",4)==0) {
+      debug ("using old /proc/net/dev format\n");
+      proc_net_dev_fmt=" eth%*d: %ld %*d %*d %*d %*d %ld";
+      proc_net_dev_bytes=0;
+    } else {
+      debug ("using new /proc/net/dev format\n");
+      proc_net_dev_fmt=" eth%*d: %ld %*d %*d %*d %*d %*d %*d %*d %ld";
+      proc_net_dev_bytes=1;
+    }
+    
     fd = open("/proc/net/dev", O_RDONLY | O_NDELAY);
     if (fd==-1) {
       perror ("open(/proc/net/dev) failed");
@@ -583,24 +606,16 @@ int Net (int *rx, int *tx, int *bytes)
   p=buffer;
   while ((s=strsep(&p, "\n"))) {
     unsigned long r, t;
-    
-    if (sscanf (s, " eth%*d:%ld %*d %*d %*d %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d %*d %*d", &r, &t)==2) {
+    if (sscanf (s, proc_net_dev_fmt, &r, &t)==2) {
       pkg_rx+=r;
       pkg_tx+=t;
-      *bytes=1;
-    } else {
-      if (sscanf (s, " eth%*d:%*d: %ld %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d", &r, &t)==2 ||
-         sscanf (s, " eth%*d:%ld %*d %*d %*d %*d %ld %*d %*d %*d %*d %*d",      &r, &t)==2) {
-       pkg_rx+=r;
-       pkg_tx+=t;
-       *bytes=0;
-      }
     }
   }
-  
+
   *rx=smooth("net_rx", 500, pkg_rx);
   *tx=smooth("net_tx", 500, pkg_tx);
-  
+  *bytes=proc_net_dev_bytes;
+
   return 0;
 }