src/configfile.c: Use cf_util_get_cdtime() to parse the "Interval" settings.
[collectd.git] / src / configfile.c
index 6a83072..d3d3841 100644 (file)
@@ -118,7 +118,8 @@ static cf_global_option_t cf_global_options[] =
        {"Timeout",     NULL, "2"},
        {"AutoLoadPlugin", NULL, "false"},
        {"PreCacheChain",  NULL, "PreCache"},
-       {"PostCacheChain", NULL, "PostCache"}
+       {"PostCacheChain", NULL, "PostCache"},
+       {"MaxReadInterval", NULL, "86400"}
 };
 static int cf_global_options_num = STATIC_ARRAY_SIZE (cf_global_options);
 
@@ -288,14 +289,10 @@ static int dispatch_loadplugin (const oconfig_item_t *ci)
                if (strcasecmp("Globals", ci->children[i].key) == 0)
                        cf_util_get_flag (ci->children + i, &flags, PLUGIN_FLAGS_GLOBAL);
                else if (strcasecmp ("Interval", ci->children[i].key) == 0) {
-                       double interval = 0.0;
-
-                       if (cf_util_get_double (ci->children + i, &interval) != 0) {
-                               /* cf_util_get_double will log an error */
+                       if (cf_util_get_cdtime (ci->children + i, &ctx.interval) != 0) {
+                               /* cf_util_get_cdtime will log an error */
                                continue;
                        }
-
-                       ctx.interval = DOUBLE_TO_CDTIME_T (interval);
                }
                else {
                        WARNING("Ignoring unknown LoadPlugin option \"%s\" "
@@ -481,6 +478,12 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
 
        /* Resize the memory containing the children to be big enough to hold
         * all children. */
+       if (dst->children_num + src->children_num - 1 == 0)
+       {
+               dst->children_num = 0;
+               return (0);
+       }
+
        temp = (oconfig_item_t *) realloc (dst->children,
                        sizeof (oconfig_item_t)
                        * (dst->children_num + src->children_num - 1));
@@ -595,7 +598,8 @@ static int cf_include_all (oconfig_item_t *root, int depth)
                        return (-1);
 
                /* Now replace the i'th child in `root' with `new'. */
-               cf_ci_replace_child (root, new, i);
+               if (cf_ci_replace_child (root, new, i) < 0)
+                       return (-1);
 
                /* ... and go back to the new i'th child. */
                --i;
@@ -895,6 +899,13 @@ int global_option_set (const char *option, const char *value)
        if (i >= cf_global_options_num)
                return (-1);
 
+       if (strcasecmp (option, "PIDFile") == 0 && pidfile_from_cli == 1)
+       {
+               DEBUG ("Configfile: Ignoring `PIDFILE' option because "
+                       "command-line option `-P' take precedence.");
+               return (0);
+       }
+
        sfree (cf_global_options[i].value);
 
        if (value != NULL)
@@ -923,19 +934,19 @@ const char *global_option_get (const char *option)
 
 long global_option_get_long (const char *option, long default_value)
 {
-               const char *str;
-               long value;
+       const char *str;
+       long value;
 
-               str = global_option_get (option);
-               if (NULL == str)
-                       return (default_value);
+       str = global_option_get (option);
+       if (NULL == str)
+               return (default_value);
 
-               errno = 0;
-               value = strtol (str, /* endptr = */ NULL, /* base = */ 0);
-               if (errno != 0)
-                       return (default_value);
+       errno = 0;
+       value = strtol (str, /* endptr = */ NULL, /* base = */ 0);
+       if (errno != 0)
+               return (default_value);
 
-               return (value);
+       return (value);
 } /* char *global_option_get_long */
 
 cdtime_t cf_get_default_interval (void)