Bumped version to 4.8.5; Updated ChangeLog.
[collectd.git] / src / configfile.c
index c929d00..34049f2 100644 (file)
@@ -172,7 +172,7 @@ static int cf_dispatch (const char *type, const char *orig_key,
        free (key);
        free (value);
 
-       DEBUG ("return (%i)", ret);
+       DEBUG ("cf_dispatch: return (%i)", ret);
 
        return (ret);
 } /* int cf_dispatch */
@@ -336,7 +336,15 @@ 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 allowed for this plugin.");}
+               {
+                       WARNING ("There is a `%s' block within the "
+                                       "configuration for the %s plugin. "
+                                       "The plugin either only expects "
+                                       "\"simple\" configuration statements "
+                                       "or wasn't loaded using `LoadPlugin'."
+                                       " Please check your configuration.",
+                                       ci->children[i].key, name);
+               }
        }
 
        return (0);
@@ -378,12 +386,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
-        * 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. */
-       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);
        }
 
@@ -415,7 +423,7 @@ static int cf_ci_replace_child (oconfig_item_t *dst, oconfig_item_t *src,
                                sizeof (oconfig_item_t) * nmemb);
        }
 
-       /* Last but not least: If there are new childrem, copy them to the
+       /* Last but not least: If there are new children, copy them to the
         * memory reserved for them. */
        if (src->children_num > 0)
        {
@@ -491,6 +499,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);
 
+               /* ... and go back to the new i'th child. */
+               --i;
+
                sfree (new->values);
                sfree (new);
        } /* for (i = 0; i < root->children_num; i++) */
@@ -548,14 +559,14 @@ static oconfig_item_t *cf_read_dir (const char *dir, int depth)
                ERROR ("configfile: malloc failed.");
                return (NULL);
        }
-       memset (root, '\0', sizeof (oconfig_item_t));
+       memset (root, 0, sizeof (oconfig_item_t));
 
        while ((de = readdir (dh)) != NULL)
        {
                char   name[1024];
                char **tmp;
 
-               if ((de->d_name[0] == '.') || (de->d_name[0] == '\0'))
+               if ((de->d_name[0] == '.') || (de->d_name[0] == 0))
                        continue;
 
                status = ssnprintf (name, sizeof (name), "%s/%s",
@@ -597,13 +608,11 @@ static oconfig_item_t *cf_read_dir (const char *dir, int depth)
                char *name = filenames[i];
 
                temp = cf_read_generic (name, depth);
-               if (temp == NULL) {
-                       int j;
-                       for (j = i; j < filenames_num; ++j)
-                               free (filenames[j]);
-                       free (filenames);
-                       oconfig_free (root);
-                       return (NULL);
+               if (temp == NULL)
+               {
+                       /* An error should already have been reported. */
+                       sfree (name);
+                       continue;
                }
 
                cf_ci_append_children (root, temp);