Pass a pointer to parser function where the parser can store one
pointer worth of its private state. This can be useful in different
ways whenever a parser needs to store some information between parser
calls.
Signed-off-by: Timo Kokkonen <timo.t.kokkonen@iki.fi>
#define STATFILE "/proc/stat"
#define STATFILE "/proc/stat"
-static int cpu_parser(char *data, const char **p)
+static int cpu_parser(char *data, const char **p, void **state)
{
char buf[1024];
char *str = buf;
{
char buf[1024];
char *str = buf;
#define MEMFILE "/proc/meminfo"
#define MEMFILE "/proc/meminfo"
-static int mem_parser(char *data, const char **p)
+static int mem_parser(char *data, const char **p, void **state)
{
char buf[1024], word[1024];
int free = 0, buffered = 0, cache = 0, active = 0, inactive = 0,
{
char buf[1024], word[1024];
int free = 0, buffered = 0, cache = 0, active = 0, inactive = 0,
-int cpu_mem_parser(char *data, const char **p)
+int cpu_mem_parser(char *data, const char **p, void **state)
{
char cpu[RRD_DATA_MAX_LEN], mem[RRD_DATA_MAX_LEN];
{
char cpu[RRD_DATA_MAX_LEN], mem[RRD_DATA_MAX_LEN];
- cpu_parser(cpu, p);
- mem_parser(mem, p);
+ cpu_parser(cpu, p, state);
+ mem_parser(mem, p, state);
snprintf(data, RRD_DATA_MAX_LEN, "%s:%s", cpu, mem);
return 0;
}
/* Run a command and feed the output from stdout directly to rrdtool */
snprintf(data, RRD_DATA_MAX_LEN, "%s:%s", cpu, mem);
return 0;
}
/* Run a command and feed the output from stdout directly to rrdtool */
-static int script_parser(char *rrd_data, const char **parser_data)
+static int script_parser(char *rrd_data, const char **parser_data, void **state)
{
FILE *readf;
int pid, ret;
{
FILE *readf;
int pid, ret;
-int netstats_parser(char *rrd_data, const char **parser_data)
+int netstats_parser(char *rrd_data, const char **parser_data, void **state)
{
struct iface_stats stat;
const char **iface_name = parser_data;
{
struct iface_stats stat;
const char **iface_name = parser_data;
-static int onewire_parser(char *rrd_data, const char **parser_data)
+static int onewire_parser(char *rrd_data, const char **parser_data, void **s)
{
OWNET_HANDLE h;
const char *server_addr, *mount_point;
{
OWNET_HANDLE h;
const char *server_addr, *mount_point;
#ifndef _PARSER_H
#define _PARSER_H
#ifndef _PARSER_H
#define _PARSER_H
-typedef int (parse_fn_t)(char *rrd_data, const char **parser_data);
+typedef int (parse_fn_t)(char *rrd_data, const char **parser_data,
+ void **parser_state);
struct parser_info {
struct parser_info *next;
struct parser_info {
struct parser_info *next;
l = sprintf(data, "N:");
if (rrd->parser && rrd->parser->parse) {
l = sprintf(data, "N:");
if (rrd->parser && rrd->parser->parse) {
- rrd->parser->parse(data + l, rrd->parser_data);
+ rrd->parser->parse(data + l, rrd->parser_data,
+ &rrd->parser_state);
data[RRD_DATA_MAX_LEN + 2] = '\0';
pr_info("Data: %s\n", data);
data[RRD_DATA_MAX_LEN + 2] = '\0';
pr_info("Data: %s\n", data);
/* Parser to aquire data for rrd */
struct parser_info *parser;
const char **parser_data; /* data to be fed to the parser */
/* Parser to aquire data for rrd */
struct parser_info *parser;
const char **parser_data; /* data to be fed to the parser */
+ void *parser_state; /* pointer to parser private state */
char *const *pre_draw_cmd; /* Command to execute prior drawing images*/
char *const *post_draw_cmd; /* ..and after drawing images */
char *const *pre_draw_cmd; /* Command to execute prior drawing images*/
char *const *post_draw_cmd; /* ..and after drawing images */