--- netkit-rusers-0.17/rpc.rstatd/rstat_proc.c.2.4 Wed Feb 14 20:54:31 2001
+++ netkit-rusers-0.17/rpc.rstatd/rstat_proc.c Wed Feb 14 20:55:08 2001
@@ -385,12 +385,14 @@
#if defined(__linux__)
+#define MAX_DISKS 4
+
struct _ldisk {
- unsigned int xfer[4];
- unsigned int rio[4];
- unsigned int wio[4];
- unsigned int rblk[4];
- unsigned int wblk[4];
+ unsigned int xfer[MAX_DISKS];
+ unsigned int rio[MAX_DISKS];
+ unsigned int wio[MAX_DISKS];
+ unsigned int rblk[MAX_DISKS];
+ unsigned int wblk[MAX_DISKS];
};
static void
@@ -401,7 +403,8 @@
static int stat;
#define BUFFSIZE 1024
char buff[BUFFSIZE];
-
+ int ndisks;
+
if ((stat=open("/proc/stat", O_RDONLY, 0)) != -1) {
char* b;
buff[BUFFSIZE-1] = 0; /* ensure null termination in buffer */
@@ -410,24 +413,29 @@
*itot = 0;
*i1 = 1; /* ensure assert below will fail if the sscanf bombs */
b = strstr(buff, "cpu ");
+ if(b)
sscanf(b, "cpu %lu %lu %lu %lu", cuse, cice, csys, cide);
- b = strstr(buff, "disk ");
- sscanf(b, "disk %u %u %u %u", d->xfer+0, d->xfer+1, d->xfer+2, d->xfer+3);
- b = strstr(buff, "disk_rio ");
- sscanf(b, "disk_rio %u %u %u %u", d->rio+0, d->rio+1, d->rio+2, d->rio+3);
- b = strstr(buff, "disk_wio ");
- sscanf(b, "disk_rio %u %u %u %u", d->wio+0, d->wio+1, d->wio+2, d->wio+3);
- b = strstr(buff, "disk_rblk ");
- sscanf(b, "disk_rblk %u %u %u %u", d->rblk+0,d->rblk+1,d->rblk+2,d->rblk+3);
- b = strstr(buff, "disk_wblk ");
- sscanf(b, "disk_wblk %u %u %u %u", d->wblk+0,d->wblk+1,d->wblk+2,d->wblk+3);
+ b = strstr(buff, "disk_io:");
+ ndisks = 0;
+ while ( (b = strstr(b, "):")) != NULL && ndisks < MAX_DISKS ) {
+ sscanf (b, "):(%u,%u,%u,%u,%u)", &d->xfer[ndisks],
+ &d->rio[ndisks], &d->rblk[ndisks],
+ &d->wio[ndisks], &d->wblk[ndisks]);
+ ndisks++;
+ b += 2;
+ }
+
b = strstr(buff, "page ");
+ if(b)
sscanf(b, "page %u %u", pin, pout);
b = strstr(buff, "swap ");
+ if(b)
sscanf(b, "swap %u %u", sin, sout);
b = strstr(buff, "intr ");
+ if(b)
sscanf(b, "intr %u %u", itot, i1);
b = strstr(buff, "ctxt ");
+ if(b)
sscanf(b, "ctxt %u", ct);
assert(*itot>*i1);
}
@@ -477,6 +485,7 @@
{
switch (procnetdev_vsn) {
case 3:
+ if(bp)
sscanf(bp,
"%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",
&ife->stats.rx_bytes,
@@ -498,6 +507,7 @@
&ife->stats.tx_compressed);
break;
case 2:
+ if(bp)
sscanf(bp, "%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",
&ife->stats.rx_bytes,
&ife->stats.rx_packets,
@@ -516,6 +526,7 @@
ife->stats.rx_multicast = 0;
break;
case 1:
+ if(bp)
sscanf(bp, "%ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld",
&ife->stats.rx_packets,
&ife->stats.rx_errors,