diff options
-rw-r--r-- | layout.c | 21 | ||||
-rw-r--r-- | plugin_cfg.c | 27 | ||||
-rw-r--r-- | plugin_netdev.c | 21 | ||||
-rw-r--r-- | plugin_proc_stat.c | 122 |
4 files changed, 133 insertions, 58 deletions
@@ -1,4 +1,4 @@ -/* $Id: layout.c,v 1.8 2004/02/01 18:08:50 reinelt Exp $ +/* $Id: layout.c,v 1.9 2004/02/01 19:37:40 reinelt Exp $ * * new layouter framework * @@ -23,6 +23,9 @@ * * * $Log: layout.c,v $ + * Revision 1.9 2004/02/01 19:37:40 reinelt + * got rid of every strtok() incarnation. + * * Revision 1.8 2004/02/01 18:08:50 reinelt * removed strtok() from layout processing (took me hours to find this bug) * further strtok() removind should be done! @@ -111,20 +114,22 @@ int layout_init (char *layout) // map to lower char for scanf() for (l=list; *l!='\0'; l++) *l=tolower(*l); - while (list!=NULL) { - char *pipe; + l=list; + while (l!=NULL) { + char *p; int i, n; // list is delimited by | - if ((pipe=strchr(list, '|'))!=NULL) *pipe='\0'; - i=sscanf (list, "row%d.col%d%n", &row, &col, &n); - if (i==2 && list[n]=='\0') { - widget=cfg_get(section, list, NULL); + while (*l=='|') l++; + if ((p=strchr(l, '|'))!=NULL) *p='\0'; + i=sscanf (l, "row%d.col%d%n", &row, &col, &n); + if (i==2 && l[n]=='\0') { + widget=cfg_get(section, l, NULL); if (widget!=NULL && *widget!='\0') { layout_addItem (widget, row, col); } } // next field - list=pipe?pipe+1:NULL; + l=p?p+1:NULL; } free (list); diff --git a/plugin_cfg.c b/plugin_cfg.c index 14296c4..0a9f9c6 100644 --- a/plugin_cfg.c +++ b/plugin_cfg.c @@ -1,4 +1,4 @@ -/* $Id: plugin_cfg.c,v 1.4 2004/01/30 20:57:56 reinelt Exp $ +/* $Id: plugin_cfg.c,v 1.5 2004/02/01 19:37:40 reinelt Exp $ * * plugin for config file access * @@ -23,6 +23,9 @@ * * * $Log: plugin_cfg.c,v $ + * Revision 1.5 2004/02/01 19:37:40 reinelt + * got rid of every strtok() incarnation. + * * Revision 1.4 2004/01/30 20:57:56 reinelt * HD44780 patch from Martin Hejl * dmalloc integrated @@ -70,28 +73,30 @@ static void load_variables (void) { char *section="Variables"; - char *list, *key; + char *list, *l, *p; char *expression; RESULT result = {0, 0.0, NULL}; list=cfg_list(section); - key=strtok(list, "|"); - while (key!=NULL) { - if (strchr(key, '.')!=NULL || strchr(key, ':') !=0) { - error ("ignoring variable '%s' from %s: structures not allowed", key, cfg_source()); + l=list; + while (l!=NULL) { + while (*l=='|') l++; + if ((p=strchr(l, '|'))!=NULL) *p='\0'; + if (strchr(l, '.')!=NULL || strchr(l, ':') !=0) { + error ("ignoring variable '%s' from %s: structures not allowed", l, cfg_source()); } else { - expression=cfg_get_raw (section, key, ""); + expression=cfg_get_raw (section, l, ""); if (expression!=NULL && *expression!='\0') { if (Eval(expression, &result)==0) { - debug ("Variable %s = '%s' (%f)", key, R2S(&result), R2N(&result)); - SetVariable (key, &result); + debug ("Variable %s = '%s' (%f)", l, R2S(&result), R2N(&result)); + SetVariable (l, &result); DelResult (&result); } else { - error ("error evaluating variable '%s' from %s", key, cfg_source()); + error ("error evaluating variable '%s' from %s", list, cfg_source()); } } } - key=strtok(NULL, "|"); + l=p?p+1:NULL; } free (list); diff --git a/plugin_netdev.c b/plugin_netdev.c index edfe1c4..2d49e3f 100644 --- a/plugin_netdev.c +++ b/plugin_netdev.c @@ -1,4 +1,4 @@ -/* $Id: plugin_netdev.c,v 1.2 2004/01/29 04:40:02 reinelt Exp $ +/* $Id: plugin_netdev.c,v 1.3 2004/02/01 19:37:40 reinelt Exp $ * * plugin for /proc/net/dev parsing * @@ -23,6 +23,9 @@ * * * $Log: plugin_netdev.c,v $ + * Revision 1.3 2004/02/01 19:37:40 reinelt + * got rid of every strtok() incarnation. + * * Revision 1.2 2004/01/29 04:40:02 reinelt * every .c file includes "config.h" now * @@ -86,8 +89,9 @@ static int parse_netdev (void) line=0; while (!feof(stream)) { char buffer[256]; - char header[256]; + char header[256], *h, *t; char *head[32]; + char delim[]=" :|\t\n"; int col; if (fgets (buffer, sizeof(buffer), stream) == NULL) break; @@ -97,26 +101,29 @@ static int parse_netdev (void) // line 2 used for headers if (line==2) { - char *h; strncpy(header, buffer, sizeof(header)); RxTx=(strrchr(header, '|') - header); col=0; - h=strtok(header, "| \t\n"); + h=header; while (h!=NULL) { + while (strchr(delim, *h)) h++; + if ((t=strpbrk(h, delim))!=NULL) *t='\0'; head[col++]=h; - h=strtok(NULL, "| \t\n"); + h=t?t+1:NULL; } } else { char *h, *iface=NULL; col=0; - h=strtok(buffer, ":| \t\n"); + h=buffer; while (h!=NULL) { + while (strchr(delim, *h)) h++; + if ((t=strpbrk(h, delim))!=NULL) *t='\0'; if (col==0) { iface=h; } else { hash_set3 (iface, (h-buffer) < RxTx ? "Rx" : "Tx", head[col], h); } - h=strtok(NULL, "| \t\n"); + h=t?t+1:NULL; col++; } } diff --git a/plugin_proc_stat.c b/plugin_proc_stat.c index 5053787..48a19a0 100644 --- a/plugin_proc_stat.c +++ b/plugin_proc_stat.c @@ -1,4 +1,4 @@ -/* $Id: plugin_proc_stat.c,v 1.13 2004/01/29 04:40:02 reinelt Exp $ +/* $Id: plugin_proc_stat.c,v 1.14 2004/02/01 19:37:40 reinelt Exp $ * * plugin for /proc/stat parsing * @@ -23,6 +23,9 @@ * * * $Log: plugin_proc_stat.c,v $ + * Revision 1.14 2004/02/01 19:37:40 reinelt + * got rid of every strtok() incarnation. + * * Revision 1.13 2004/01/29 04:40:02 reinelt * every .c file includes "config.h" now * @@ -97,6 +100,7 @@ static HASH Stat = { 0, }; static void hash_set1 (char *key1, char *val) { + debug ("Michi: hash_set (<%s>=<%s>)", key1, val); hash_set_delta (&Stat, key1, val); } @@ -137,51 +141,105 @@ static int parse_proc_stat (void) while (!feof(stream)) { char buffer[1024]; if (fgets (buffer, sizeof(buffer), stream) == NULL) break; - + if (strncmp(buffer, "cpu", 3)==0) { - char *cpu; - cpu=strtok(buffer, " \t\n"); - hash_set2 (cpu, "user", strtok(NULL, " \t\n")); - hash_set2 (cpu, "nice", strtok(NULL, " \t\n")); - hash_set2 (cpu, "system", strtok(NULL, " \t\n")); - hash_set2 (cpu, "idle", strtok(NULL, " \t\n")); + char *key[] = { "user", "nice", "system", "idle" }; + char delim[] = " \t\n"; + char *cpu, *beg, *end; + int i; + + cpu=buffer; + + // skip "cpu" or "cpu0" block + if ((end=strpbrk(buffer, delim))!=NULL) *end='\0'; + beg=end?end+1:NULL; + + for (i=0; i<4 && beg!=NULL; i++) { + while (strchr(delim, *beg)) beg++; + if ((end=strpbrk(beg, delim))) *end='\0'; + hash_set2 (cpu, key[i], beg); + beg=end?end+1:NULL; + } } + else if (strncmp(buffer, "page ", 5)==0) { - strtok(buffer, " \t\n"); - hash_set2 ("page", "in", strtok(NULL, " \t\n")); - hash_set2 ("page", "out", strtok(NULL, " \t\n")); + char *key[] = { "in", "out" }; + char delim[] = " \t\n"; + char *beg, *end; + int i; + + for (i=0, beg=buffer+5; i<2 && beg!=NULL; i++) { + while (strchr(delim, *beg)) beg++; + if ((end=strpbrk(beg, delim))) *end='\0'; + hash_set2 ("page", key[i], beg); + beg=end?end+1:NULL; + } } + else if (strncmp(buffer, "swap ", 5)==0) { - strtok(buffer, " \t\n"); - hash_set2 ("swap", "in", strtok(NULL, " \t\n")); - hash_set2 ("swap", "out", strtok(NULL, " \t\n")); + char *key[] = { "in", "out" }; + char delim[] = " \t\n"; + char *beg, *end; + int i; + + for (i=0, beg=buffer+5; i<2 && beg!=NULL; i++) { + while (strchr(delim, *beg)) beg++; + if ((end=strpbrk(beg, delim))) *end='\0'; + hash_set2 ("swap", key[i], beg); + beg=end?end+1:NULL; + } } + else if (strncmp(buffer, "intr ", 5)==0) { + char delim[]=" \t\n"; + char *beg, *end, num[4]; int i; - strtok(buffer, " \t\n"); - hash_set2 ("intr", "sum", strtok(NULL, " \t\n")); - for (i=0; i<16; i++) { - char buffer[3]; - snprintf(buffer, sizeof(buffer), "%d", i); - hash_set2 ("intr", buffer, strtok(NULL, " \t\n")); + + for (i=0, beg=buffer+5; i<17 && beg!=NULL; i++) { + while (strchr(delim, *beg)) beg++; + if ((end=strpbrk(beg, delim))) *end='\0'; + if (i==0) + snprintf(num, sizeof(num), "sum"); + else + snprintf(num, sizeof(num), "%d", i-1); + hash_set2 ("intr", num, beg); + beg=end?end+1:NULL; } } + + else if (strncmp(buffer, "disk_io:", 8)==0) { - char *dev=strtok(buffer+8, " \t\n:()"); + char *key[] = { "io", "rio", "rblk", "wio", "wblk" }; + char delim[] = " ():,\t\n"; + char *dev, *beg, *end, *p; + int i; + + dev=buffer+8; while (dev!=NULL) { - char *p; + while (strchr(delim, *dev)) dev++; + if ((end=strchr(dev, ')'))) *end='\0'; while ((p=strchr(dev, ','))!=NULL) *p=':'; - hash_set3 ("disk_io", dev, "io", strtok(NULL, " :(,")); - hash_set3 ("disk_io", dev, "rio", strtok(NULL, " ,")); - hash_set3 ("disk_io", dev, "rblk", strtok(NULL, " ,")); - hash_set3 ("disk_io", dev, "wio", strtok(NULL, " ,")); - hash_set3 ("disk_io", dev, "wblk", strtok(NULL, " ,)")); - dev=strtok(NULL, " \t\n:()"); - } - } + beg=end?end+1:NULL; + for (i=0; i<5 && beg!=NULL; i++) { + while (strchr(delim, *beg)) beg++; + if ((end=strpbrk(beg, delim))) *end='\0'; + hash_set3 ("disk_io", dev, key[i], beg); + beg=end?end+1:NULL; + } + dev=beg; + } + } + else { - char *key=strtok(buffer, " \t\n"); - hash_set2 (key, NULL, strtok(NULL, " \t\n")); + char delim[] = " \t\n"; + char *beg, *end; + + beg=buffer; + if ((end=strpbrk(beg, delim))) *end='\0'; + beg=end?end+1:NULL; + if ((end=strpbrk(beg, delim))) *end='\0'; + while (strchr(delim, *beg)) beg++; + hash_set1 (buffer, beg); } } fclose (stream); |