]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: domain: Refactor cleanup in virSysinfoBIOSParseXML
authorPeter Krempa <pkrempa@redhat.com>
Thu, 6 Oct 2022 09:09:23 +0000 (11:09 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 2 Nov 2022 08:22:55 +0000 (09:22 +0100)
Register automatic cleanup for virSysinfoBIOSDef and use it to refactor
the cleanup code paths in virSysinfoBIOSParseXML.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/util/virsysinfo.h

index 8b1a28c0d387b1f95b21309794f5da8ec8a1b68e..f8091b9fb55dac7c2c9bd135e93e7fe18d707096 100644 (file)
@@ -12080,19 +12080,16 @@ virSysinfoBIOSParseXML(xmlNodePtr node,
                        virSysinfoBIOSDef **bios)
 {
     VIR_XPATH_NODE_AUTORESTORE(ctxt)
-    int ret = -1;
-    virSysinfoBIOSDef *def;
+    g_autoptr(virSysinfoBIOSDef) def = g_new0(virSysinfoBIOSDef, 1);
 
     ctxt->node = node;
 
     if (!virXMLNodeNameEqual(node, "bios")) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
                        _("XML does not contain expected 'bios' element"));
-        return ret;
+        return -1;
     }
 
-    def = g_new0(virSysinfoBIOSDef, 1);
-
     def->vendor = virXPathString("string(entry[@name='vendor'])", ctxt);
     def->version = virXPathString("string(entry[@name='version'])", ctxt);
     def->date = virXPathString("string(entry[@name='date'])", ctxt);
@@ -12117,20 +12114,16 @@ virSysinfoBIOSParseXML(xmlNodePtr node,
             (year < 0 || (year >= 100 && year < 1900))) {
             virReportError(VIR_ERR_XML_DETAIL, "%s",
                            _("Invalid BIOS 'date' format"));
-            goto cleanup;
+            return -1;
         }
     }
 
     if (!def->vendor && !def->version &&
-        !def->date && !def->release) {
-        g_clear_pointer(&def, virSysinfoBIOSDefFree);
-    }
+        !def->date && !def->release)
+        return 0;
 
     *bios = g_steal_pointer(&def);
-    ret = 0;
- cleanup:
-    virSysinfoBIOSDefFree(def);
-    return ret;
+    return 0;
 }
 
 static int
index 97e0e18ddff7b31ad088a675222b95d17c53fd4c..899193dc81aa91542316af4efc1855b4678cf5ed 100644 (file)
@@ -142,6 +142,7 @@ struct _virSysinfoDef {
 virSysinfoDef *virSysinfoRead(void);
 
 void virSysinfoBIOSDefFree(virSysinfoBIOSDef *def);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virSysinfoBIOSDef, virSysinfoBIOSDefFree);
 void virSysinfoSystemDefFree(virSysinfoSystemDef *def);
 void virSysinfoBaseBoardDefClear(virSysinfoBaseBoardDef *def);
 void virSysinfoChassisDefFree(virSysinfoChassisDef *def);