X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcsv.c;h=a94b7001025419602961980efa993506e9755b33;hb=2b65cef7870c385b9b56b34701ced62528f3f7c0;hp=ff59f91c006e81511b6aeec738000398ed945bdc;hpb=107a919d0d15d51d774c92ac72879d869e0fa4ee;p=collectd.git diff --git a/src/csv.c b/src/csv.c index ff59f91c..a94b7001 100644 --- a/src/csv.c +++ b/src/csv.c @@ -45,9 +45,11 @@ static int value_list_to_string (char *buffer, int buffer_len, int i; gauge_t *rates = NULL; + assert (0 == strcmp (ds->type, vl->type)); + memset (buffer, '\0', buffer_len); - status = snprintf (buffer, buffer_len, "%u", (unsigned int) vl->time); + status = ssnprintf (buffer, buffer_len, "%u", (unsigned int) vl->time); if ((status < 1) || (status >= buffer_len)) return (-1); offset = status; @@ -62,7 +64,7 @@ static int value_list_to_string (char *buffer, int buffer_len, { if (store_rates == 0) { - status = snprintf (buffer + offset, + status = ssnprintf (buffer + offset, buffer_len - offset, ",%llu", vl->values[i].counter); @@ -77,14 +79,14 @@ static int value_list_to_string (char *buffer, int buffer_len, "uc_get_rate failed."); return (-1); } - status = snprintf (buffer + offset, + status = ssnprintf (buffer + offset, buffer_len - offset, ",%lf", rates[i]); } } else /* if (ds->ds[i].type == DS_TYPE_GAUGE) */ { - status = snprintf (buffer + offset, buffer_len - offset, + status = ssnprintf (buffer + offset, buffer_len - offset, ",%lf", vl->values[i].gauge); } @@ -107,37 +109,39 @@ static int value_list_to_filename (char *buffer, int buffer_len, int offset = 0; int status; + assert (0 == strcmp (ds->type, vl->type)); + if (datadir != NULL) { - status = snprintf (buffer + offset, buffer_len - offset, + status = ssnprintf (buffer + offset, buffer_len - offset, "%s/", datadir); if ((status < 1) || (status >= buffer_len - offset)) return (-1); offset += status; } - status = snprintf (buffer + offset, buffer_len - offset, + status = ssnprintf (buffer + offset, buffer_len - offset, "%s/", vl->host); if ((status < 1) || (status >= buffer_len - offset)) return (-1); offset += status; if (strlen (vl->plugin_instance) > 0) - status = snprintf (buffer + offset, buffer_len - offset, + status = ssnprintf (buffer + offset, buffer_len - offset, "%s-%s/", vl->plugin, vl->plugin_instance); else - status = snprintf (buffer + offset, buffer_len - offset, + status = ssnprintf (buffer + offset, buffer_len - offset, "%s/", vl->plugin); if ((status < 1) || (status >= buffer_len - offset)) return (-1); offset += status; if (strlen (vl->type_instance) > 0) - status = snprintf (buffer + offset, buffer_len - offset, - "%s-%s", ds->type, vl->type_instance); + status = ssnprintf (buffer + offset, buffer_len - offset, + "%s-%s", vl->type, vl->type_instance); else - status = snprintf (buffer + offset, buffer_len - offset, - "%s", ds->type); + status = ssnprintf (buffer + offset, buffer_len - offset, + "%s", vl->type); if ((status < 1) || (status >= buffer_len - offset)) return (-1); offset += status; @@ -242,6 +246,11 @@ static int csv_write (const data_set_t *ds, const value_list_t *vl) struct flock fl; int status; + if (0 != strcmp (ds->type, vl->type)) { + ERROR ("csv plugin: DS type does not match value list type"); + return -1; + } + if (value_list_to_filename (filename, sizeof (filename), ds, vl) != 0) return (-1);