projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/utils_cache.c: Try to improve code readability.
[collectd.git]
/
src
/
configfile.c
diff --git
a/src/configfile.c
b/src/configfile.c
index
2afef4f
..
0bb46e4
100644
(file)
--- a/
src/configfile.c
+++ b/
src/configfile.c
@@
-1,6
+1,6
@@
/**
* collectd - src/configfile.c
/**
* collectd - src/configfile.c
- * Copyright (C) 2005-200
8
Florian octo Forster
+ * Copyright (C) 2005-200
9
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
*
* 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 "configfile.h"
#include "types_list.h"
#include "utils_threshold.h"
+#include "filter_chain.h"
#if HAVE_WORDEXP_H
# include <wordexp.h>
#if HAVE_WORDEXP_H
# include <wordexp.h>
@@
-97,7
+98,9
@@
static cf_global_option_t cf_global_options[] =
{"Hostname", NULL, NULL},
{"FQDNLookup", NULL, "false"},
{"Interval", NULL, "10"},
{"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);
};
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++)
{
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;
{
ret = (*cf_cb->callback) (key, value);
break;
@@
-204,13
+208,18
@@
static int dispatch_value_typesdb (const oconfig_item_t *ci)
cf_default_typesdb = 0;
cf_default_typesdb = 0;
- if (ci->values_num < 1)
+ if (ci->values_num < 1) {
+ ERROR ("configfile: `TypesDB' needs at least one argument.");
return (-1);
return (-1);
+ }
for (i = 0; i < ci->values_num; ++i)
{
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;
continue;
+ }
read_types_list (ci->values[i].value.string);
}
read_types_list (ci->values[i].value.string);
}
@@
-276,7
+285,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));
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)
{
static int dispatch_value (const oconfig_item_t *ci)
{
@@
-327,7
+336,7
@@
static int dispatch_block_plugin (oconfig_item_t *ci)
if (ci->children[i].children == NULL)
dispatch_value_plugin (name, ci->children + i);
else
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 allow
ed
for this plugin.");}
}
return (0);
}
return (0);
@@
-340,6
+349,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));
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);
}
return (0);
}
@@
-367,12
+378,12
@@
static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
temp = NULL;
/* If (src->children_num == 0) the array size is decreased. If offset
temp = NULL;
/* If (src->children_num == 0) the array size is decreased. If offset
- * is _not_ the last element, (offset < (
src
->children_num - 1)), then
+ * is _not_ the last element, (offset < (
dst
->children_num - 1)), then
* we need to move the trailing elements before resizing the array. */
* we need to move the trailing elements before resizing the array. */
- if ((src->children_num == 0) && (offset < (
src
->children_num - 1)))
+ if ((src->children_num == 0) && (offset < (
dst
->children_num - 1)))
{
{
- int nmemb =
src
->children_num - (offset + 1);
- memmove (
src->children + offset, src
->children + offset + 1,
+ int nmemb =
dst
->children_num - (offset + 1);
+ memmove (
dst->children + offset, dst
->children + offset + 1,
sizeof (oconfig_item_t) * nmemb);
}
sizeof (oconfig_item_t) * nmemb);
}
@@
-404,7
+415,7
@@
static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
sizeof (oconfig_item_t) * nmemb);
}
sizeof (oconfig_item_t) * nmemb);
}
- /* Last but not least: If there are new childre
m
, copy them to the
+ /* Last but not least: If there are new childre
n
, copy them to the
* memory reserved for them. */
if (src->children_num > 0)
{
* memory reserved for them. */
if (src->children_num > 0)
{
@@
-480,6
+491,9
@@
static int cf_include_all (oconfig_item_t *root, int depth)
/* Now replace the i'th child in `root' with `new'. */
cf_ci_replace_child (root, new, i);
/* Now replace the i'th child in `root' with `new'. */
cf_ci_replace_child (root, new, i);
+ /* ... and go back to the new i'th child. */
+ --i;
+
sfree (new->values);
sfree (new);
} /* for (i = 0; i < root->children_num; i++) */
sfree (new->values);
sfree (new);
} /* for (i = 0; i < root->children_num; i++) */
@@
-549,7
+563,7
@@
static oconfig_item_t *cf_read_dir (const char *dir, int depth)
status = ssnprintf (name, sizeof (name), "%s/%s",
dir, de->d_name);
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.",
{
ERROR ("configfile: Not including `%s/%s' because its"
" name is too long.",
@@
-624,7
+638,7
@@
static oconfig_item_t *cf_read_generic (const char *path, int depth)
int status;
const char *path_ptr;
wordexp_t we;
int status;
const char *path_ptr;
wordexp_t we;
-
in
t i;
+
size_
t i;
if (depth >= CF_MAX_DEPTH)
{
if (depth >= CF_MAX_DEPTH)
{
@@
-887,7
+901,11
@@
int cf_read (char *filename)
dispatch_block (conf->children + i);
}
dispatch_block (conf->children + i);
}
+ oconfig_free (conf);
+
+ /* Read the default types.db if no `TypesDB' option was given. */
if (cf_default_typesdb)
if (cf_default_typesdb)
- read_types_list (PLUGINDIR"/types.db"); /* FIXME: Configure path */
+ read_types_list (PKGDATADIR"/types.db");
+
return (0);
} /* int cf_read */
return (0);
} /* int cf_read */