You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.9 KiB
126 lines
3.9 KiB
From 9db959c9e3f83cb2a4fc07534462e769990d9631 Mon Sep 17 00:00:00 2001
|
|
From: Jim Fehlig <jfehlig@suse.com>
|
|
Date: Mon, 6 Jan 2020 16:33:24 -0700
|
|
Subject: [PATCH 03/19] libmetrics: Initialize local variable 'ret' to failure
|
|
|
|
The get_mdef() and dump_xenstore_metrics() functions have local variables
|
|
named 'ret' that are initialized to zero, meaning success. In failure paths
|
|
'ret' is set to -1 before jumping to the 'out' label. Invert this logic by
|
|
initializing 'ret' to -1 and only setting it to success after the function
|
|
bodies have successfully executed.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
|
---
|
|
libmetrics/libmetrics.c | 16 ++++------------
|
|
1 file changed, 4 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/libmetrics/libmetrics.c b/libmetrics/libmetrics.c
|
|
index a5582e7..49b38ea 100644
|
|
--- a/libmetrics/libmetrics.c
|
|
+++ b/libmetrics/libmetrics.c
|
|
@@ -228,7 +228,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
|
xmlNodePtr node;
|
|
char *str;
|
|
char *xpath;
|
|
- int ret = 0;
|
|
+ int ret = -1;
|
|
|
|
ctxt = xmlXPathNewContext(mdisk->doc);
|
|
if (!ctxt) {
|
|
@@ -242,19 +242,16 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
|
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
|
|
__func__, pmdef->name, pmdef->context);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
if (xmlXPathNodeSetGetLength(obj->nodesetval) != 1) {
|
|
libmsg("%s(): No metrics found that matches %s in context:%s or malformed definition\n",
|
|
__func__, pmdef->name, pmdef->context);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
node = obj->nodesetval->nodeTab[0];
|
|
if ((str = (char *)xmlGetProp(node, BAD_CAST "type")) == NULL) {
|
|
libmsg("%s(): Metric type not specified\n", __func__);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
metric_type_from_str((char *)str, &(pmdef->type));
|
|
@@ -267,7 +264,6 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
|
free(xpath);
|
|
if ((obj == NULL) || (obj->type != XPATH_NODESET)) {
|
|
libmsg("%s(): No metrics value found!\n", __func__);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
@@ -276,6 +272,7 @@ static int get_mdef(metric_disk *mdisk, private_metric *pmdef)
|
|
str = (char *)xmlNodeListGetString(mdisk->doc, node, 1);
|
|
pmdef->value = strdup(str);
|
|
free(str);
|
|
+ ret = 0;
|
|
|
|
out:
|
|
if (obj)
|
|
@@ -707,7 +704,7 @@ int dump_xenstore_metrics(const char *dest_file)
|
|
char *buf = NULL, *path = NULL, *metrics = NULL;
|
|
struct xs_handle *xsh = NULL;
|
|
unsigned int len;
|
|
- int ret = 0;
|
|
+ int ret = -1;
|
|
xmlParserCtxtPtr pctxt = NULL;
|
|
xmlDocPtr doc = NULL;
|
|
int domid;
|
|
@@ -726,35 +723,30 @@ int dump_xenstore_metrics(const char *dest_file)
|
|
|
|
if ((domid = get_dom_id()) == -1) {
|
|
libmsg("Unable to derive domID.\n" );
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
xsh = xs_domain_open();
|
|
if (xsh == NULL) {
|
|
libmsg("xs_domain_open() error. errno: %d.\n", errno);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
path = xs_get_domain_path(xsh, domid);
|
|
if (path == NULL) {
|
|
libmsg("xs_get_domain_path() error. domid %d.\n", 0);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
asprintf(&buf, "%s/metrics", path);
|
|
metrics = xs_read(xsh, XBT_NULL, buf, &len);
|
|
if (metrics == NULL) {
|
|
libmsg("xs_read(): uuid get error. %s.\n", buf);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
pctxt = xmlNewParserCtxt();
|
|
if (!pctxt || !pctxt->sax) {
|
|
libmsg("%s(): failed to create parser \n", __func__);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
@@ -764,10 +756,10 @@ int dump_xenstore_metrics(const char *dest_file)
|
|
XML_PARSE_NOWARNING);
|
|
if (!doc) {
|
|
libmsg("%s(): libxml failed to xenstore metrics attribute\n", __func__);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
xmlDocFormatDump(fp, doc, 1);
|
|
+ ret = 0;
|
|
|
|
out:
|
|
if (fp && fp != stdout)
|
|
--
|
|
2.32.0
|
|
|