diff --git a/src/curl_xml.c b/src/curl_xml.c
index 32a48c511afcf6e9c636117a0955cf96b882d816..8a466bae6f98ff383979e60a2c586ae8e274e6cd 100644 (file)
--- a/src/curl_xml.c
+++ b/src/curl_xml.c
char *path;
char *type;
cx_values_t *values;
- int values_len;
+ size_t values_len;
char *instance_prefix;
char *instance;
int is_table;
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);
}
@@ -343,6 +343,7 @@ static int cx_handle_single_value_xpath (xmlXPathContextPtr xpath_ctx, /* {{{ */
/* free up object */
xmlXPathFreeObject (values_node_obj);
+ sfree (node_value);
/* We have reached here which means that
* we have got something to work */
{
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);
/* If the base xpath returns more than one block, the result is assumed to be
* a table. The `Instance' option is not optional in this case. Check for the
* condition and inform the user. */
- if (is_table)
+ if (is_table && (xpath->instance == NULL))
{
WARNING ("curl_xml plugin: "
"Base-XPath %s is a table (more than one result was returned), "
if (xpath->instance_prefix != NULL)
{
if (instance_node != NULL)
+ {
+ char *node_value = (char *) xmlNodeGetContent(instance_node->nodeTab[0]);
ssnprintf (vl->type_instance, sizeof (vl->type_instance),"%s%s",
- xpath->instance_prefix, (char *) xmlNodeGetContent(instance_node->nodeTab[0]));
+ xpath->instance_prefix, node_value);
+ sfree (node_value);
+ }
else
sstrncpy (vl->type_instance, xpath->instance_prefix,
sizeof (vl->type_instance));
/* If instance_prefix and instance_node are NULL, then
* don't set the type_instance */
if (instance_node != NULL)
- sstrncpy (vl->type_instance, (char *) xmlNodeGetContent(instance_node->nodeTab[0]),
- sizeof (vl->type_instance));
+ {
+ char *node_value = (char *) xmlNodeGetContent(instance_node->nodeTab[0]);
+ sstrncpy (vl->type_instance, node_value, sizeof (vl->type_instance));
+ sfree (node_value);
+ }
}
/* Free `instance_node_obj' this late, because `instance_node' points to
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++)
if (db->post_body != NULL)
curl_easy_setopt (db->curl, CURLOPT_POSTFIELDS, db->post_body);
+#ifdef HAVE_CURLOPT_TIMEOUT_MS
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()));
+#endif
return (0);
} /* }}} int cx_init_curl */
{
ERROR ("curl_xml plugin: cx_config: "
"Invalid key: %s", ci->key);
+ cx_free (db);
return (-1);
}
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