X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fconfigfile.c;h=bb1770d2ab13e8c8a26c84901dd9e012dd0fc9a7;hb=1f9eac059788d149e3d8fcd9895d3c977f5e9521;hp=2afef4f024e402a2cc94bd7f02744e599fac440a;hpb=c28bc580c110c78741d0805c7652e05d994b0ff4;p=collectd.git diff --git a/src/configfile.c b/src/configfile.c index 2afef4f0..bb1770d2 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 @@ -30,6 +30,7 @@ #include "configfile.h" #include "types_list.h" #include "utils_threshold.h" +#include "filter_chain.h" #if HAVE_WORDEXP_H # include @@ -97,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); @@ -155,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; @@ -276,7 +280,7 @@ static int dispatch_value_plugin (const char *plugin, oconfig_item_t *ci) buffer_ptr = buffer + 1; return (cf_dispatch (plugin, ci->key, buffer_ptr)); -} /* int plugin_conf_dispatch */ +} /* int dispatch_value_plugin */ static int dispatch_value (const oconfig_item_t *ci) { @@ -327,7 +331,7 @@ static int dispatch_block_plugin (oconfig_item_t *ci) if (ci->children[i].children == NULL) dispatch_value_plugin (name, ci->children + i); else - {DEBUG ("No nested config blocks allow for this plugin.");} + {DEBUG ("No nested config blocks allowed for this plugin.");} } return (0); @@ -340,6 +344,8 @@ static int dispatch_block (oconfig_item_t *ci) return (dispatch_block_plugin (ci)); else if (strcasecmp (ci->key, "Threshold") == 0) return (ut_config (ci)); + else if (strcasecmp (ci->key, "Chain") == 0) + return (fc_configure (ci)); return (0); } @@ -549,7 +555,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.", @@ -624,7 +630,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) { @@ -887,7 +893,11 @@ int cf_read (char *filename) dispatch_block (conf->children + i); } + oconfig_free (conf); + + /* Read the default types.db if no `TypesDB' option was given. */ if (cf_default_typesdb) - read_types_list (PLUGINDIR"/types.db"); /* FIXME: Configure path */ + read_types_list (PKGDATADIR"/types.db"); + return (0); } /* int cf_read */