diff options
author | reinelt <> | 2004-01-16 07:26:25 +0000 |
---|---|---|
committer | reinelt <> | 2004-01-16 07:26:25 +0000 |
commit | 5f79f653ec112d7dd631c8bdd78ed540b3151385 (patch) | |
tree | 90bdb480a89d1bfa29f2296d363b93b13e62b39f /plugin_meminfo.c | |
parent | 914a4213848bda638bbe14b0fd7b873b8bdeeb32 (diff) | |
download | lcd4linux-5f79f653ec112d7dd631c8bdd78ed540b3151385.tar.gz |
[lcd4linux @ 2004-01-16 07:26:25 by reinelt]
moved various /proc parsing to own functions
made some progress with /proc/stat parsing
Diffstat (limited to 'plugin_meminfo.c')
-rw-r--r-- | plugin_meminfo.c | 99 |
1 files changed, 55 insertions, 44 deletions
diff --git a/plugin_meminfo.c b/plugin_meminfo.c index 6115515..ec8e611 100644 --- a/plugin_meminfo.c +++ b/plugin_meminfo.c @@ -1,4 +1,4 @@ -/* $Id: plugin_meminfo.c,v 1.1 2004/01/15 04:29:45 reinelt Exp $ +/* $Id: plugin_meminfo.c,v 1.2 2004/01/16 07:26:25 reinelt Exp $ * * plugin for /proc/meminfo parsing * @@ -23,6 +23,10 @@ * * * $Log: plugin_meminfo.c,v $ + * Revision 1.2 2004/01/16 07:26:25 reinelt + * moved various /proc parsing to own functions + * made some progress with /proc/stat parsing + * * Revision 1.1 2004/01/15 04:29:45 reinelt * moved lcd4linux.conf.sample to *.old * lcd4linux.conf.sample with new layout @@ -49,64 +53,71 @@ #include "debug.h" #include "plugin.h" + #include "hash.h" -static void my_meminfo (RESULT *result, RESULT *arg1) +static HASH MemInfo = { 0, 0, NULL }; + + +static int parse_meminfo (void) { - static HASH MemInfo = { 0, 0, NULL }; - static time_t now=0; - char *key, *val; + FILE *stream; int line; // reread every second only - if (time(NULL)!=now) { - FILE *stream; - - // destroy previous hash table - hash_destroy (&MemInfo); - - stream=fopen("/proc/meminfo", "r"); - if (stream==NULL) { - error ("fopen(/proc/meminfo) failed: %s", strerror(errno)); - SetResult(&result, R_STRING, ""); - return; - } + if (time(NULL)==now) return 0; + time(&now); + + stream=fopen("/proc/meminfo", "r"); + if (stream==NULL) { + error ("fopen(/proc/meminfo) failed: %s", strerror(errno)); + return -1; + } - line=0; - while (!feof(stream)) { - char buffer[256]; - char *c; - fgets (buffer, sizeof(buffer), stream); - c=strchr(buffer, ':'); - if (c==NULL) continue; - key=buffer; val=c+1; - // strip leading blanks from key - while (isspace(*key)) *key++='\0'; - // strip trailing blanks from key - do *c='\0'; while (isspace(*--c)); - // strip leading blanks from value - while (isspace(*val)) *val++='\0'; - // strip trailing blanks from value - for (c=val; *c!='\0';c++); - while (isspace(*--c)) *c='\0'; - // skip lines that do not end with " kB" - if (*c=='B' && *(c-1)=='k' && *(c-2)==' ') { - // strip trailing " kB" from value - *(c-2)='\0'; - // add entry to hash table - hash_set (&MemInfo, key, val); - } + line=0; + while (!feof(stream)) { + char buffer[256]; + char *c, *key, *val; + fgets (buffer, sizeof(buffer), stream); + c=strchr(buffer, ':'); + if (c==NULL) continue; + key=buffer; val=c+1; + // strip leading blanks from key + while (isspace(*key)) *key++='\0'; + // strip trailing blanks from key + do *c='\0'; while (isspace(*--c)); + // strip leading blanks from value + while (isspace(*val)) *val++='\0'; + // strip trailing blanks from value + for (c=val; *c!='\0';c++); + while (isspace(*--c)) *c='\0'; + // skip lines that do not end with " kB" + if (*c=='B' && *(c-1)=='k' && *(c-2)==' ') { + // strip trailing " kB" from value + *(c-2)='\0'; + // add entry to hash table + hash_set (&MemInfo, key, val); } - fclose (stream); - time(&now); + } + fclose (stream); + return 0; +} + +static void my_meminfo (RESULT *result, RESULT *arg1) +{ + char *key, *val; + + if (parse_meminfo()<0) { + SetResult(&result, R_STRING, ""); + return; } key=R2S(arg1); val=hash_get(&MemInfo, key); if (val==NULL) val=""; - + SetResult(&result, R_STRING, val); } |