mirror of
https://github.com/netfun2000/lcd4linux.git
synced 2026-02-27 09:44:34 +08:00
[lcd4linux @ 2000-08-09 11:03:07 by reinelt]
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
This commit is contained in:
@@ -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
|
||||
*
|
||||
@@ -20,6 +20,11 @@
|
||||
*
|
||||
*
|
||||
* $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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user