diff --git a/clients/lcdproc/machine.h b/clients/lcdproc/machine.h index 87b91cc..31f7f8e 100644 --- a/clients/lcdproc/machine.h +++ b/clients/lcdproc/machine.h @@ -46,18 +46,18 @@ typedef struct typedef struct { - int total; /**< total memory (in kB) */ - int cache; /**< memory in page cache (in kB) */ - int buffers; /**< memory in buffer cache (in kB) */ - int free; /**< free memory (in kB) */ - int shared; /**< ??? (in kB) */ + long total; /**< total memory (in kB) */ + long cache; /**< memory in page cache (in kB) */ + long buffers; /**< memory in buffer cache (in kB) */ + long free; /**< free memory (in kB) */ + long shared; /**< ??? (in kB) */ } meminfo_type; typedef struct { char name[16]; /**< process name */ - int totl; /**< process memory usage (in kB) */ + long totl; /**< process memory usage (in kB) */ int number; /**< incstances of the process */ } procinfo_type; diff --git a/clients/lcdproc/machine_Linux.c b/clients/lcdproc/machine_Linux.c index d4f8a96..e037064 100644 --- a/clients/lcdproc/machine_Linux.c +++ b/clients/lcdproc/machine_Linux.c @@ -153,26 +153,29 @@ reread (int f, char *errmsg) exit(1); } -long -getentry (const char *tag, const char *bufptr) +static int +getentry (const char *tag, const char *bufptr, long *value) { char *tail; int len = strlen(tag); - long retval; + long val; while (bufptr != NULL) { if (*bufptr == '\n') bufptr++; if (!strncmp(tag, bufptr, len)) { - retval = strtol(bufptr + len, &tail, 10); - if (tail == bufptr + len) - return -1; + errno = 0; + val = strtol(bufptr + len, &tail, 10); + if ((errno == 0) && (tail != bufptr + len)) { + *value = val; + return TRUE; + } else - return retval; + return FALSE; } bufptr = strchr(bufptr, '\n'); } - return -1; + return FALSE; } int machine_get_battstat(int *acstat, int *battflag, int *percent) @@ -332,14 +335,16 @@ int machine_get_loadavg(double *load) int machine_get_meminfo(meminfo_type *result) { + long tmp; + reread(meminfo_fd, "get_meminfo"); - result[0].total = getentry("MemTotal:", procbuf); - result[0].free = getentry("MemFree:", procbuf); - result[0].shared = getentry("MemShared:", procbuf); - result[0].buffers = getentry("Buffers:", procbuf); - result[0].cache = getentry("Cached:", procbuf); - result[1].total = getentry("SwapTotal:", procbuf); - result[1].free = getentry("SwapFree:", procbuf); + result[0].total = (getentry("MemTotal:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[0].free = (getentry("MemFree:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[0].shared = (getentry("MemShared:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[0].buffers = (getentry("Buffers:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[0].cache = (getentry("Cached:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[1].total = (getentry("SwapTotal:", procbuf, &tmp) == TRUE) ? tmp : 0L; + result[1].free = (getentry("SwapFree:", procbuf, &tmp) == TRUE) ? tmp : 0L; return(TRUE); }