]> git.itanic.dy.fi Git - rrdd/commitdiff
parser: Add extra pointer to parse function prototype
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Fri, 11 Mar 2011 13:20:13 +0000 (15:20 +0200)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Fri, 11 Mar 2011 21:26:11 +0000 (23:26 +0200)
This pointer makes it possible to feed some data to the parser, such
as command line parameters.

Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
parser.c
parser.h
rrdtool.c
rrdtool.h

index d0ef1ba6a929048ed0be4f81ffa99de754d2f36e..f393fed2dd59be0ae86d722bec84c11d03d2d17c 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -10,7 +10,7 @@
 
 #define STATFILE "/proc/stat"
 
-int cpu_parser(char *data)
+int cpu_parser(char *data, void *p)
 {
        char buf[1024];
        char *str = buf;
@@ -45,7 +45,7 @@ int cpu_parser(char *data)
 
 #define MEMFILE "/proc/meminfo"
 
-int mem_parser(char *data)
+int mem_parser(char *data, void *p)
 {
        char buf[1024], word[1024];
        int free = 0, buffered = 0, cache = 0, active = 0, inactive = 0,
@@ -99,18 +99,18 @@ int mem_parser(char *data)
        return 0;
 }
 
-int cpu_mem_parser(char *data)
+int cpu_mem_parser(char *data, void *p)
 {
        char cpu[1024], mem[1024];
 
-       cpu_parser(cpu);
-       mem_parser(mem);
+       cpu_parser(cpu, p);
+       mem_parser(mem, p);
        sprintf(data, "%s:%s", cpu, mem);
 
        return 0;
 }
 
-int digitemp_parser(char *data)
+int digitemp_parser(char *data, void *p)
 {
        const char digitemp_cmd[] = "/usr/bin/digitemp";
        char *const digitemp_args[] = { "", "-o2", "-a", "-q", 0 };
@@ -147,12 +147,12 @@ int digitemp_parser(char *data)
        return 0;
 }
 
-int digitemp_parser_mod(char *data)
+int digitemp_parser_mod(char *data, void *p)
 {
        char buf[1024];
        int ret;
 
-       ret = digitemp_parser(buf);
+       ret = digitemp_parser(buf, p);
        sprintf(data, "U:%s", buf);
 
        return ret;
index 0162acaaa931e4cc54259a4fdafd978e2a7da448..6807aece02cf06a434d7fecab3b6bebcc8859040 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -1,10 +1,10 @@
 #ifndef _PARSER_H
 #define _PARSER_H
 
-int cpu_parser(char *data);
-int mem_parser(char *data);
-int cpu_mem_parser(char *data);
-int digitemp_parser(char *data);
-int digitemp_parser_mod(char *data);
+int cpu_parser(char *data, void *p);
+int mem_parser(char *data, void *p);
+int cpu_mem_parser(char *data, void *p);
+int digitemp_parser(char *data, void *p);
+int digitemp_parser_mod(char *data, void *p);
 
 #endif
index b2e7f1da1efbf37ac8f72ffa7447a65de07d183d..2f1985e3dfee6cf51e4e4953d22046dfb7e1cde1 100644 (file)
--- a/rrdtool.c
+++ b/rrdtool.c
@@ -111,7 +111,7 @@ int rrdtool_update_data(struct rrd_database *rrd)
        l = sprintf(data, "N:");
 
        if (rrd->parse) {
-               rrd->parse(data + l);
+               rrd->parse(data + l, rrd->parser_data);
                run(cmd, cmdline);
        }
 
index 862eef41eafff09650beaad9a93f71a8f651b101..8f3222d677b1d26dab2fb687d40bfb251cdd8325 100644 (file)
--- a/rrdtool.h
+++ b/rrdtool.h
@@ -34,7 +34,11 @@ struct rrd_archive {
 struct rrd_database {
        char    *filename;      /* rrd database location */
        int     interval;       /* Update interval */
-       int (*parse)(char *data); /* Parser to aquire data */
+
+       /* Parser to aquire data for rrd */
+       int (*parse)(char *rrd_data, void *parser_data);
+       void *parser_data;      /* data to be fed to the parser */
+
        struct  rrd_image **images; /* Images to draw */
 
        struct rrd_data_source *sources; /* These are currently only used */