xenConfigGetString returns a newly-allocated pointer and it has to be
freed by the caller.
Signed-off-by: Fabiano FidĂȘncio <fidencio(a)redhat.com>
---
src/xenconfig/xen_xl.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
index 19b6604e05..e4ef061cdb 100644
--- a/src/xenconfig/xen_xl.c
+++ b/src/xenconfig/xen_xl.c
@@ -65,37 +65,44 @@ extern int xlu_disk_parse(XLU_Config *cfg,
static int xenParseCmdline(virConfPtr conf, char **r_cmdline)
{
char *cmdline = NULL;
- const char *root, *extra, *buf;
+ const char *root = NULL, *extra = NULL, *buf = NULL;
+ int ret = -1;
if (xenConfigGetString(conf, "cmdline", &buf, NULL) < 0)
- return -1;
+ goto cleanup;
if (xenConfigGetString(conf, "root", &root, NULL) < 0)
- return -1;
+ goto cleanup;
if (xenConfigGetString(conf, "extra", &extra, NULL) < 0)
- return -1;
+ goto cleanup;
if (buf) {
if (VIR_STRDUP(cmdline, buf) < 0)
- return -1;
+ goto cleanup;
if (root || extra)
VIR_WARN("ignoring root= and extra= in favour of cmdline=");
} else {
if (root && extra) {
if (virAsprintf(&cmdline, "root=%s %s", root, extra) < 0)
- return -1;
+ goto cleanup;
} else if (root) {
if (virAsprintf(&cmdline, "root=%s", root) < 0)
- return -1;
+ goto cleanup;
} else if (extra) {
if (VIR_STRDUP(cmdline, extra) < 0)
- return -1;
+ goto cleanup;
}
}
*r_cmdline = cmdline;
- return 0;
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(buf);
+ VIR_FREE(extra);
+ VIR_FREE(root);
+ return ret;
}
static int
--
2.17.1