Merge branch 'collectd-5.5'
authorFlorian Forster <octo@collectd.org>
Wed, 9 Dec 2015 08:54:09 +0000 (09:54 +0100)
committerFlorian Forster <octo@collectd.org>
Wed, 9 Dec 2015 08:54:09 +0000 (09:54 +0100)
1  2 
src/curl_json.c
src/curl_xml.c

diff --combined src/curl_json.c
@@@ -28,6 -28,7 +28,6 @@@
  #include "utils_avltree.h"
  #include "utils_complain.h"
  
 -#include <sys/socket.h>
  #include <sys/types.h>
  #include <sys/un.h>
  
@@@ -131,11 -132,17 +131,11 @@@ static size_t cj_curl_callback (void *b
      return (len);
  #endif
  
 -  if (status != yajl_status_ok)
 -  {
 -    unsigned char *msg =
 -      yajl_get_error(db->yajl, /* verbose = */ 1,
 -          /* jsonText = */ (unsigned char *) buf, (unsigned int) len);
 -    ERROR ("curl_json plugin: yajl_parse failed: %s", msg);
 -    yajl_free_error(db->yajl, msg);
 -    return (0); /* abort write callback */
 -  }
 -
 -  return (len);
 +  unsigned char *msg = yajl_get_error(db->yajl, /* verbose = */ 1,
 +        /* jsonText = */ (unsigned char *) buf, (unsigned int) len);
 +  ERROR ("curl_json plugin: yajl_parse failed: %s", msg);
 +  yajl_free_error(db->yajl, msg);
 +  return (0); /* abort write callback */
  } /* }}} size_t cj_curl_callback */
  
  static int cj_get_type (cj_key_t *key)
@@@ -519,71 -526,68 +519,68 @@@ static int cj_config_add_key (cj_t *db
        break;
    } /* for (i = 0; i < ci->children_num; i++) */
  
-   while (status == 0)
+   if (status != 0)
    {
-     if (key->type == NULL)
-     {
-       WARNING ("curl_json plugin: `Type' missing in `Key' block.");
-       status = -1;
-     }
+     cj_key_free (key);
+     return (-1);
+   }
  
-     break;
-   } /* while (status == 0) */
+   if (key->type == NULL)
+   {
+     WARNING ("curl_json plugin: `Type' missing in `Key' block.");
+     cj_key_free (key);
+     return (-1);
+   }
  
    /* store path in a tree that will match the json map structure, example:
     * "httpd/requests/count",
     * "httpd/requests/current" ->
     * { "httpd": { "requests": { "count": $key, "current": $key } } }
     */
-   if (status == 0)
+   char *ptr;
+   char *name;
+   c_avl_tree_t *tree;
+   if (db->tree == NULL)
+     db->tree = cj_avl_create();
+   tree = db->tree;
+   ptr = key->path;
+   if (*ptr == '/')
+     ++ptr;
+   name = ptr;
+   while ((ptr = strchr (name, '/')) != NULL)
    {
-     char *ptr;
-     char *name;
      char ent[PATH_MAX];
-     c_avl_tree_t *tree;
+     c_avl_tree_t *value;
+     size_t len;
  
-     if (db->tree == NULL)
-       db->tree = cj_avl_create();
+     len = ptr - name;
+     if (len == 0)
+       break;
  
-     tree = db->tree;
-     ptr = key->path;
-     if (*ptr == '/')
-       ++ptr;
+     len = COUCH_MIN(len, sizeof (ent)-1);
+     sstrncpy (ent, name, len+1);
  
-     name = ptr;
-     while (*ptr)
-     {
-       if (*ptr == '/')
-       {
-         c_avl_tree_t *value;
-         size_t len;
-         len = ptr-name;
-         if (len == 0)
-           break;
-         len = COUCH_MIN(len, sizeof (ent)-1);
-         sstrncpy (ent, name, len+1);
-         if (c_avl_get (tree, ent, (void *) &value) != 0)
-         {
-           value = cj_avl_create ();
-           c_avl_insert (tree, strdup (ent), value);
-         }
-         tree = value;
-         name = ptr+1;
-       }
-       ++ptr;
-     }
-     if (*name)
-       c_avl_insert (tree, strdup(name), key);
-     else
+     if (c_avl_get (tree, ent, (void *) &value) != 0)
      {
-       ERROR ("curl_json plugin: invalid key: %s", key->path);
-       status = -1;
+       value = cj_avl_create ();
+       c_avl_insert (tree, strdup (ent), value);
      }
+     tree = value;
+     name = ptr + 1;
+   }
+   if (strlen (name) == 0)
+   {
+     ERROR ("curl_json plugin: invalid key: %s", key->path);
+     cj_key_free (key);
+     return (-1);
    }
  
+   c_avl_insert (tree, strdup (name), key);
    return (status);
  } /* }}} int cj_config_add_key */
  
@@@ -648,9 -652,11 +645,9 @@@ static int cj_init_curl (cj_t *db) /* {
    if (db->timeout >= 0)
      curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, (long) db->timeout);
    else if (db->interval > 0)
 -    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS,
 -        CDTIME_T_TO_MS(db->timeout));
 +    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, (long) CDTIME_T_TO_MS(db->timeout));
    else
 -    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS,
 -        CDTIME_T_TO_MS(plugin_get_interval()));
 +    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, (long) CDTIME_T_TO_MS(plugin_get_interval()));
  #endif
  
    return (0);
@@@ -755,6 -761,9 +752,6 @@@ static int cj_config_add_url (oconfig_i
    {
      user_data_t ud;
      char *cb_name;
 -    struct timespec interval = { 0, 0 };
 -
 -    CDTIME_T_TO_TIMESPEC (db->interval, &interval);
  
      if (db->instance == NULL)
        db->instance = strdup("default");
                 db->instance, db->url ? db->url : db->sock);
  
      plugin_register_complex_read (/* group = */ NULL, cb_name, cj_read,
 -                                  /* interval = */ (db->interval > 0) ? &interval : NULL,
 +                                  /* interval = */ db->interval,
                                    &ud);
      sfree (cb_name);
    }
diff --combined src/curl_xml.c
@@@ -50,7 -50,7 +50,7 @@@ struct cx_xpath_s /* {{{ *
    char *path;
    char *type;
    cx_values_t *values;
 -  int values_len;
 +  size_t values_len;
    char *instance_prefix;
    char *instance;
    int is_table;
@@@ -240,7 -240,7 +240,7 @@@ static int cx_check_type (const data_se
  
    if (ds->ds_num != xpath->values_len)
    {
 -    WARNING ("curl_xml plugin: DataSet `%s' requires %i values, but config talks about %i",
 +    WARNING ("curl_xml plugin: DataSet `%s' requires %zu values, but config talks about %zu",
          xpath->type, ds->ds_num, xpath->values_len);
      return (-1);
    }
@@@ -356,7 -356,7 +356,7 @@@ static int cx_handle_all_value_xpaths (
  {
    value_t values[xpath->values_len];
    int status;
 -  int i;
 +  size_t i;
  
    assert (xpath->values_len > 0);
    assert (xpath->values_len == vl->values_len);
@@@ -689,7 -689,7 +689,7 @@@ static int cx_config_add_values (const 
    xpath->values = (cx_values_t *) malloc (sizeof (cx_values_t) * ci->values_num);
    if (xpath->values == NULL)
      return (-1);
 -  xpath->values_len = ci->values_num;
 +  xpath->values_len = (size_t) ci->values_num;
  
    /* populate cx_values_t structure */
    for (i = 0; i < ci->values_num; i++)
    return (0);
  } /* }}} cx_config_add_values */
  
- static int cx_config_add_xpath (cx_t *db, /* {{{ */
-                                    oconfig_item_t *ci)
+ static int cx_config_add_xpath (cx_t *db, oconfig_item_t *ci) /* {{{ */
  {
    cx_xpath_t *xpath;
+   char *name;
+   llentry_t *le;
    int status;
    int i;
  
-   xpath = (cx_xpath_t *) malloc (sizeof (*xpath));
+   xpath = malloc (sizeof (*xpath));
    if (xpath == NULL)
    {
      ERROR ("curl_xml plugin: malloc failed.");
    status = cf_util_get_string (ci, &xpath->path);
    if (status != 0)
    {
-     sfree (xpath);
+     cx_xpath_free (xpath);
      return (status);
    }
  
    /* error out if xpath->path is an empty string */
-   if (*xpath->path == 0)
+   if (strlen (xpath->path) == 0)
    {
      ERROR ("curl_xml plugin: invalid xpath. "
             "xpath value can't be an empty string");
-     sfree (xpath);
+     cx_xpath_free (xpath);
      return (-1);
    }
  
        break;
    } /* for (i = 0; i < ci->children_num; i++) */
  
-   if (status == 0 && xpath->type == NULL)
+   if (status != 0)
    {
-     WARNING ("curl_xml plugin: `Type' missing in `xpath' block.");
-     status = -1;
+     cx_xpath_free (xpath);
+     return status;
    }
  
-   if (status == 0)
+   if (xpath->type == NULL)
    {
-     char *name;
-     llentry_t *le;
+     WARNING ("curl_xml plugin: `Type' missing in `xpath' block.");
+     cx_xpath_free (xpath);
+     return -1;
+   }
  
+   if (db->list == NULL)
+   {
+     db->list = llist_create();
      if (db->list == NULL)
      {
-       db->list = llist_create();
-       if (db->list == NULL)
-       {
-         ERROR ("curl_xml plugin: list creation failed.");
-         sfree (xpath->path);
-         sfree (xpath);
-         return (-1);
-       }
-     }
-     name = strdup(xpath->path);
-     if (name == NULL)
-     {
-         ERROR ("curl_xml plugin: strdup failed.");
-         sfree (xpath->path);
-         sfree (xpath);
-         return (-1);
-     }
-     le = llentry_create (name, xpath);
-     if (le == NULL)
-     {
-       ERROR ("curl_xml plugin: llentry_create failed.");
-       sfree (xpath->path);
-       sfree (xpath);
+       ERROR ("curl_xml plugin: list creation failed.");
+       cx_xpath_free (xpath);
        return (-1);
      }
+   }
+   name = strdup (xpath->path);
+   if (name == NULL)
+   {
+     ERROR ("curl_xml plugin: strdup failed.");
+     cx_xpath_free (xpath);
+     return (-1);
+   }
  
-     llist_append (db->list, le);
+   le = llentry_create (name, xpath);
+   if (le == NULL)
+   {
+     ERROR ("curl_xml plugin: llentry_create failed.");
+     cx_xpath_free (xpath);
+     sfree (name);
+     return (-1);
    }
  
-   return (status);
+   llist_append (db->list, le);
+   return (0);
  } /* }}} int cx_config_add_xpath */
  
  static int cx_config_add_namespace (cx_t *db, /* {{{ */
@@@ -904,7 -903,8 +903,7 @@@ static int cx_init_curl (cx_t *db) /* {
    if (db->timeout >= 0)
      curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, (long) db->timeout);
    else
 -    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS,
 -       CDTIME_T_TO_MS(plugin_get_interval()));
 +    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, (long) CDTIME_T_TO_MS(plugin_get_interval()));
  #endif
  
    return (0);
@@@ -1022,7 -1022,7 +1021,7 @@@ static int cx_config_add_url (oconfig_i
  
      cb_name = ssnprintf_alloc ("curl_xml-%s-%s", db->instance, db->url);
      plugin_register_complex_read (/* group = */ "curl_xml", cb_name, cx_read,
 -                                  /* interval = */ NULL, &ud);
 +                                  /* interval = */ 0, &ud);
      sfree (cb_name);
    }
    else