Blame rusers-0.17-rstatd-no-static-buffer.patch
|
cvsdist |
530f2db |
--- netkit-rusers-0.17/rpc.rstatd/rstat_proc.c.buffer Thu May 30 16:24:12 2002
|
|
cvsdist |
530f2db |
+++ netkit-rusers-0.17/rpc.rstatd/rstat_proc.c Thu May 30 16:59:13 2002
|
|
cvsdist |
530f2db |
@@ -402,14 +402,26 @@
|
|
cvsdist |
530f2db |
{
|
|
cvsdist |
530f2db |
static int stat;
|
|
cvsdist |
530f2db |
#define BUFFSIZE 1024
|
|
cvsdist |
530f2db |
- char buff[BUFFSIZE];
|
|
cvsdist |
530f2db |
+ char *buff = NULL;
|
|
cvsdist |
530f2db |
+ off_t buffsize = 1;
|
|
cvsdist |
530f2db |
int ndisks;
|
|
cvsdist |
530f2db |
|
|
cvsdist |
530f2db |
if ((stat=open("/proc/stat", O_RDONLY, 0)) != -1) {
|
|
cvsdist |
530f2db |
char* b;
|
|
cvsdist |
530f2db |
- buff[BUFFSIZE-1] = 0; /* ensure null termination in buffer */
|
|
cvsdist |
530f2db |
- read(stat,buff,BUFFSIZE-1);
|
|
cvsdist |
530f2db |
+ b = buff;
|
|
cvsdist |
530f2db |
+
|
|
cvsdist |
530f2db |
+ do {
|
|
cvsdist |
530f2db |
+ buffsize += BUFFSIZE;
|
|
cvsdist |
530f2db |
+ buff = realloc(buff, buffsize);
|
|
cvsdist |
530f2db |
+ if (buff == NULL) {
|
|
cvsdist |
530f2db |
+ perror("getstat(): realloc");
|
|
cvsdist |
530f2db |
+ abort();
|
|
cvsdist |
530f2db |
+ }
|
|
cvsdist |
530f2db |
+ b = buff + buffsize - BUFFSIZE - 1;
|
|
cvsdist |
530f2db |
+ } while (read(stat,b,BUFFSIZE) == BUFFSIZE);
|
|
cvsdist |
530f2db |
close(stat);
|
|
cvsdist |
530f2db |
+ buff[buffsize - 1] = '\0';
|
|
cvsdist |
530f2db |
+
|
|
cvsdist |
530f2db |
*itot = 0;
|
|
cvsdist |
530f2db |
*i1 = 1; /* ensure assert below will fail if the sscanf bombs */
|
|
cvsdist |
530f2db |
b = strstr(buff, "cpu ");
|
|
cvsdist |
530f2db |
@@ -437,7 +449,10 @@
|
|
cvsdist |
530f2db |
b = strstr(buff, "ctxt ");
|
|
cvsdist |
530f2db |
if(b)
|
|
cvsdist |
530f2db |
sscanf(b, "ctxt %u", ct);
|
|
cvsdist |
530f2db |
- assert(*itot>*i1);
|
|
cvsdist |
530f2db |
+ /* avoid breaking with certain kernels where all the
|
|
cvsdist |
530f2db |
+ interrupt numbers have 1000000000 added to the value */
|
|
cvsdist |
530f2db |
+ /* assert(*itot>*i1); */
|
|
cvsdist |
530f2db |
+ free(buff);
|
|
cvsdist |
530f2db |
}
|
|
cvsdist |
530f2db |
}
|
|
cvsdist |
530f2db |
|