#include "process.h"
#include "parser.h"
#include "debug.h"
+#include "string.h"
#define MAX_ARGS 512
#define ARGSTR_LEN 32768
return 0;
}
+static int sanitize_rrd_update_data(char *data)
+{
+ char clean_data[RRD_DATA_MAX_LEN];
+ int entries = 0;
+ char *src, *end, *cln;
+
+ data[RRD_DATA_MAX_LEN - 1] = 0;
+ src = data;
+ cln = clean_data;
+
+ while (src < data + RRD_DATA_MAX_LEN && *src) {
+ if (*src == '-')
+ src++;
+
+ end = skip_numbers(src);
+
+ if (*end == '.') {
+ end++;
+ end = skip_numbers(end);
+ }
+
+ if (*end == ':' || !*end) {
+ for (; src <= end; src++, cln++)
+ *cln = *src;
+
+ goto next;
+ }
+
+ while (*end != ':' && *end)
+ end++;
+ *cln = 'U';
+ cln++;
+ *cln = ':';
+ cln++;
+ next:
+ end++;
+ src = end;
+ entries++;
+ }
+
+ strncpy(data, clean_data, RRD_DATA_MAX_LEN);
+ return entries;
+}
+
int rrdtool_update_data(struct rrd_database *rrd)
{
- char data[RRD_DATA_MAX_LEN];
+ char data[RRD_DATA_MAX_LEN + 2];
char cmd[] = RRDTOOL_CMD;
// char cmd[] = "echo";
char *cmdline[] = {
if (rrd->parse) {
rrd->parse(data + l, rrd->parser_data);
+ sanitize_rrd_update_data(data + l);
run(cmd, cmdline);
}