diff --git a/src/curl_xml.c b/src/curl_xml.c
index 689d5e1599c84bede8976dde892537f0e4d57a42..c33ec1f3ad091096ad4d3913078b80c0591f22cc 100644 (file)
--- a/src/curl_xml.c
+++ b/src/curl_xml.c
static int cx_config_append_string (const char *name, struct curl_slist **dest, /* {{{ */
oconfig_item_t *ci)
{
+ struct curl_slist *temp = NULL;
if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING))
{
WARNING ("curl_xml plugin: `%s' needs exactly one string argument.", name);
return (-1);
}
- *dest = curl_slist_append(*dest, ci->values[0].value.string);
- if (*dest == NULL)
+ temp = curl_slist_append(*dest, ci->values[0].value.string);
+ if (temp == NULL)
return (-1);
+ *dest = temp;
+
return (0);
} /* }}} int cx_config_append_string */
@@ -698,17 +701,18 @@ static int cx_config_add_values (const char *name, cx_xpath_t *xpath, /* {{{ */
sstrncpy (xpath->values[i].path, ci->values[i].value.string, sizeof (xpath->values[i].path));
}
- return (0);
+ 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");
+ 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.");
- return (-1);
- }
- }
-
- name = strdup(xpath->path);
- if (name == NULL)
- {
- ERROR ("curl_xml plugin: strdup failed.");
- return (-1);
- }
-
- le = llentry_create (name, xpath);
- if (le == NULL)
- {
- ERROR ("curl_xml plugin: llentry_create failed.");
+ ERROR ("curl_xml plugin: list creation failed.");
+ cx_xpath_free (xpath);
return (-1);
}
+ }
- llist_append (db->list, le);
+ name = strdup (xpath->path);
+ if (name == NULL)
+ {
+ ERROR ("curl_xml plugin: strdup failed.");
+ cx_xpath_free (xpath);
+ return (-1);
}
- return (status);
+ le = llentry_create (name, xpath);
+ if (le == NULL)
+ {
+ ERROR ("curl_xml plugin: llentry_create failed.");
+ cx_xpath_free (xpath);
+ sfree (name);
+ return (-1);
+ }
+
+ llist_append (db->list, le);
+ return (0);
} /* }}} int cx_config_add_xpath */
static int cx_config_add_namespace (cx_t *db, /* {{{ */
{
ERROR ("curl_xml plugin: cx_config: "
"Invalid key: %s", ci->key);
+ cx_free (db);
return (-1);
}