[PATCH 53/55] hyperv: use GLib auto-cleanup in hypervCreateInvokeXmlDoc

Matt Coleman mcoleman at datto.com
Thu Jan 21 18:51:33 UTC 2021


Signed-off-by: Matt Coleman <matt at datto.com>
---
 src/hyperv/hyperv_wmi.c | 33 +++++++++++----------------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/src/hyperv/hyperv_wmi.c b/src/hyperv/hyperv_wmi.c
index 96ae9a40c8..a28bb0e815 100644
--- a/src/hyperv/hyperv_wmi.c
+++ b/src/hyperv/hyperv_wmi.c
@@ -398,38 +398,27 @@ hypervGetCimTypeInfo(hypervCimTypePtr typemap, const char *name,
 static int
 hypervCreateInvokeXmlDoc(hypervInvokeParamsListPtr params, WsXmlDocH *docRoot)
 {
-    int result = -1;
-    char *method = NULL;
+    g_autofree char *method = g_strdup_printf("%s_INPUT", params->method);
+    g_auto(WsXmlDocH) invokeXmlDocRoot = ws_xml_create_doc(NULL, method);
     WsXmlNodeH xmlNodeMethod = NULL;
 
-    method = g_strdup_printf("%s_INPUT", params->method);
-
-    *docRoot = ws_xml_create_doc(NULL, method);
-    if (*docRoot == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Could not instantiate XML document"));
-        goto cleanup;
+    if (!invokeXmlDocRoot) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not instantiate XML document"));
+        return -1;
     }
 
-    xmlNodeMethod = xml_parser_get_root(*docRoot);
-    if (xmlNodeMethod == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       _("Could not get root node of XML document"));
-        goto cleanup;
+    xmlNodeMethod = xml_parser_get_root(invokeXmlDocRoot);
+    if (!xmlNodeMethod) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not get root node of XML document"));
+        return -1;
     }
 
     /* add resource URI as namespace */
     ws_xml_set_ns(xmlNodeMethod, params->resourceUri, "p");
 
-    result = 0;
+    *docRoot = g_steal_pointer(&invokeXmlDocRoot);
 
- cleanup:
-    if (result < 0 && *docRoot != NULL) {
-        ws_xml_destroy_doc(*docRoot);
-        *docRoot = NULL;
-    }
-    VIR_FREE(method);
-    return result;
+    return 0;
 }
 
 
-- 
2.30.0





More information about the libvir-list mailing list