X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ftable.c;h=cfe9a589c06456d1a880afb08bd1012a95c60883;hb=072244d2e10336241610a1a0448a8149e9c77e7e;hp=578e019ee5b120c28369d00b3c038121ce26cb93;hpb=64b8150edec2271bb110f36e70915fdd87d9cac2;p=collectd.git diff --git a/src/table.c b/src/table.c index 578e019e..cfe9a589 100644 --- a/src/table.c +++ b/src/table.c @@ -55,6 +55,7 @@ typedef struct { typedef struct { char *file; char *sep; + char *plugin_name; char *instance; tbl_result_t *results; @@ -92,6 +93,7 @@ static void tbl_result_clear(tbl_result_t *res) { static void tbl_setup(tbl_t *tbl, char *file) { tbl->file = sstrdup(file); tbl->sep = NULL; + tbl->plugin_name = NULL; tbl->instance = NULL; tbl->results = NULL; @@ -103,6 +105,7 @@ static void tbl_setup(tbl_t *tbl, char *file) { static void tbl_clear(tbl_t *tbl) { sfree(tbl->file); sfree(tbl->sep); + sfree(tbl->plugin_name); sfree(tbl->instance); for (size_t i = 0; i < tbl->results_num; ++i) @@ -151,8 +154,7 @@ static int tbl_config_append_array_i(char *name, size_t **var, size_t *len, tmp = realloc(*var, ((*len) + num) * sizeof(**var)); if (NULL == tmp) { - char errbuf[1024]; - log_err("realloc failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); + log_err("realloc failed: %s.", STRERRNO); return -1; } *var = tmp; @@ -166,26 +168,21 @@ static int tbl_config_append_array_i(char *name, size_t **var, size_t *len, } /* tbl_config_append_array_s */ static int tbl_config_result(tbl_t *tbl, oconfig_item_t *ci) { - tbl_result_t *res; - - int status = 0; - if (0 != ci->values_num) { log_err(" does not expect any arguments."); return 1; } - res = realloc(tbl->results, (tbl->results_num + 1) * sizeof(*tbl->results)); + tbl_result_t *res = + realloc(tbl->results, (tbl->results_num + 1) * sizeof(*tbl->results)); if (res == NULL) { - char errbuf[1024]; - log_err("realloc failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); + log_err("realloc failed: %s.", STRERRNO); return -1; } tbl->results = res; - ++tbl->results_num; - res = tbl->results + tbl->results_num - 1; + res = tbl->results + tbl->results_num; tbl_result_setup(res); for (int i = 0; i < ci->children_num; ++i) { @@ -206,49 +203,43 @@ static int tbl_config_result(tbl_t *tbl, oconfig_item_t *ci) { c->key); } + int status = 0; if (NULL == res->type) { - log_err("No \"Type\" option specified for " - "in table \"%s\".", + log_err("No \"Type\" option specified for in table \"%s\".", tbl->file); status = 1; } if (NULL == res->values) { - log_err("No \"ValuesFrom\" option specified for " - "in table \"%s\".", + log_err("No \"ValuesFrom\" option specified for in table \"%s\".", tbl->file); status = 1; } if (0 != status) { tbl_result_clear(res); - --tbl->results_num; return status; } + + tbl->results_num++; return 0; } /* tbl_config_result */ static int tbl_config_table(oconfig_item_t *ci) { - tbl_t *tbl; - - int status = 0; - if ((1 != ci->values_num) || (OCONFIG_TYPE_STRING != ci->values[0].type)) { log_err(" expects a single string argument."); return 1; } - tbl = realloc(tables, (tables_num + 1) * sizeof(*tables)); + tbl_t *tbl = realloc(tables, (tables_num + 1) * sizeof(*tables)); if (NULL == tbl) { - char errbuf[1024]; - log_err("realloc failed: %s.", sstrerror(errno, errbuf, sizeof(errbuf))); + log_err("realloc failed: %s.", STRERRNO); return -1; } tables = tbl; - ++tables_num; - tbl = tables + tables_num - 1; + tbl = tables + tables_num; tbl_setup(tbl, ci->values[0].value.string); for (size_t i = 0; i < ((size_t)ci->children_num); ++i) { @@ -256,6 +247,8 @@ static int tbl_config_table(oconfig_item_t *ci) { if (0 == strcasecmp(c->key, "Separator")) tbl_config_set_s(c->key, &tbl->sep, c); + else if (0 == strcasecmp(c->key, "Plugin")) + tbl_config_set_s(c->key, &tbl->plugin_name, c); else if (0 == strcasecmp(c->key, "Instance")) tbl_config_set_s(c->key, &tbl->instance, c); else if (0 == strcasecmp(c->key, "Result")) @@ -266,6 +259,7 @@ static int tbl_config_table(oconfig_item_t *ci) { c->key, tbl->file); } + int status = 0; if (NULL == tbl->sep) { log_err("Table \"%s\" does not specify any separator.", tbl->file); status = 1; @@ -279,13 +273,13 @@ static int tbl_config_table(oconfig_item_t *ci) { } if (NULL == tbl->results) { + assert(tbl->results_num == 0); log_err("Table \"%s\" does not specify any (valid) results.", tbl->file); status = 1; } if (0 != status) { tbl_clear(tbl); - --tables_num; return status; } @@ -300,6 +294,8 @@ static int tbl_config_table(oconfig_item_t *ci) { if (res->values[j] > tbl->max_colnum) tbl->max_colnum = res->values[j]; } + + tables_num++; return 0; } /* tbl_config_table */ @@ -367,7 +363,8 @@ static int tbl_result_dispatch(tbl_t *tbl, tbl_result_t *res, char **fields, vl.values = values; vl.values_len = STATIC_ARRAY_SIZE(values); - sstrncpy(vl.plugin, "table", sizeof(vl.plugin)); + sstrncpy(vl.plugin, (tbl->plugin_name != NULL) ? tbl->plugin_name : "table", + sizeof(vl.plugin)); sstrncpy(vl.plugin_instance, tbl->instance, sizeof(vl.plugin_instance)); sstrncpy(vl.type, res->type, sizeof(vl.type)); @@ -443,9 +440,7 @@ static int tbl_read_table(tbl_t *tbl) { fh = fopen(tbl->file, "r"); if (NULL == fh) { - char errbuf[1024]; - log_err("Failed to open file \"%s\": %s.", tbl->file, - sstrerror(errno, errbuf, sizeof(errbuf))); + log_err("Failed to open file \"%s\": %s.", tbl->file, STRERRNO); return -1; } @@ -463,9 +458,7 @@ static int tbl_read_table(tbl_t *tbl) { } if (0 != ferror(fh)) { - char errbuf[1024]; - log_err("Failed to read from file \"%s\": %s.", tbl->file, - sstrerror(errno, errbuf, sizeof(errbuf))); + log_err("Failed to read from file \"%s\": %s.", tbl->file, STRERRNO); fclose(fh); return -1; }