X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fconfigfile.c;h=c929d0097aef6279db09c61411442cf3ddef99aa;hb=3f391479bfc45d0ff6e0c7b87c899e41a192f392;hp=bdb63a9a86efdb3e658a7ca5d81b66778d9b3273;hpb=97fe230249ff8bf6aa71acfa206443c4a7238ab7;p=collectd.git diff --git a/src/configfile.c b/src/configfile.c index bdb63a9a..c929d009 100644 --- a/src/configfile.c +++ b/src/configfile.c @@ -1,6 +1,6 @@ /** * collectd - src/configfile.c - * Copyright (C) 2005-2008 Florian octo Forster + * Copyright (C) 2005-2009 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -98,7 +98,9 @@ static cf_global_option_t cf_global_options[] = {"Hostname", NULL, NULL}, {"FQDNLookup", NULL, "false"}, {"Interval", NULL, "10"}, - {"ReadThreads", NULL, "5"} + {"ReadThreads", NULL, "5"}, + {"PreCacheChain", NULL, "PreCache"}, + {"PostCacheChain", NULL, "PostCache"} }; static int cf_global_options_num = STATIC_ARRAY_LEN (cf_global_options); @@ -156,7 +158,8 @@ static int cf_dispatch (const char *type, const char *orig_key, for (i = 0; i < cf_cb->keys_num; i++) { - if (strcasecmp (cf_cb->keys[i], key) == 0) + if ((cf_cb->keys[i] != NULL) + && (strcasecmp (cf_cb->keys[i], key) == 0)) { ret = (*cf_cb->callback) (key, value); break; @@ -205,13 +208,18 @@ static int dispatch_value_typesdb (const oconfig_item_t *ci) cf_default_typesdb = 0; - if (ci->values_num < 1) + if (ci->values_num < 1) { + ERROR ("configfile: `TypesDB' needs at least one argument."); return (-1); + } for (i = 0; i < ci->values_num; ++i) { - if (OCONFIG_TYPE_STRING != ci->values[i].type) + if (OCONFIG_TYPE_STRING != ci->values[i].type) { + WARNING ("configfile: TypesDB: Skipping %i. argument which " + "is not a string.", i + 1); continue; + } read_types_list (ci->values[i].value.string); } @@ -552,7 +560,7 @@ static oconfig_item_t *cf_read_dir (const char *dir, int depth) status = ssnprintf (name, sizeof (name), "%s/%s", dir, de->d_name); - if (status >= sizeof (name)) + if ((status < 0) || ((size_t) status >= sizeof (name))) { ERROR ("configfile: Not including `%s/%s' because its" " name is too long.", @@ -627,7 +635,7 @@ static oconfig_item_t *cf_read_generic (const char *path, int depth) int status; const char *path_ptr; wordexp_t we; - int i; + size_t i; if (depth >= CF_MAX_DEPTH) {