Use modern allocators, automatic memory feeing, and decrease the scope
of some variables to remove the 'cleanup' label.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_migration_cookie.c | 31 +++++++++----------------------
1 file changed, 9 insertions(+), 22 deletions(-)
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
index 1e0a1c3d7f..a1ef3d2b12 100644
--- a/src/qemu/qemu_migration_cookie.c
+++ b/src/qemu/qemu_migration_cookie.c
@@ -1057,29 +1057,26 @@ qemuMigrationCookieStatisticsXMLParse(xmlXPathContextPtr ctxt)
static qemuMigrationCookieCapsPtr
qemuMigrationCookieCapsXMLParse(xmlXPathContextPtr ctxt)
{
- qemuMigrationCookieCapsPtr caps = NULL;
- xmlNodePtr *nodes = NULL;
- qemuMigrationCookieCapsPtr ret = NULL;
- char *name = NULL;
- char *automatic = NULL;
- int cap;
+ g_autoptr(qemuMigrationCookieCaps) caps = g_new0(qemuMigrationCookieCaps, 1);
+ g_autofree xmlNodePtr *nodes = NULL;
size_t i;
int n;
- if (VIR_ALLOC(caps) < 0)
- return NULL;
-
caps->supported = virBitmapNew(QEMU_MIGRATION_CAP_LAST);
caps->automatic = virBitmapNew(QEMU_MIGRATION_CAP_LAST);
if ((n = virXPathNodeSet("./capabilities[1]/cap", ctxt, &nodes)) <
0)
- goto cleanup;
+ return NULL;
for (i = 0; i < n; i++) {
+ g_autofree char *name = NULL;
+ g_autofree char *automatic = NULL;
+ int cap;
+
if (!(name = virXMLPropString(nodes[i], "name"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing migration capability name"));
- goto cleanup;
+ return NULL;
}
if ((cap = qemuMigrationCapabilityTypeFromString(name)) < 0)
@@ -1090,19 +1087,9 @@ qemuMigrationCookieCapsXMLParse(xmlXPathContextPtr ctxt)
if ((automatic = virXMLPropString(nodes[i], "auto")) &&
STREQ(automatic, "yes"))
ignore_value(virBitmapSetBit(caps->automatic, cap));
-
- VIR_FREE(name);
- VIR_FREE(automatic);
}
- ret = g_steal_pointer(&caps);
-
- cleanup:
- qemuMigrationCookieCapsFree(caps);
- VIR_FREE(nodes);
- VIR_FREE(name);
- VIR_FREE(automatic);
- return ret;
+ return g_steal_pointer(&caps);
}
--
2.26.2