From: Peter Krempa Date: Thu, 6 Oct 2022 09:09:23 +0000 (+0200) Subject: conf: domain: Refactor cleanup in virSysinfoBIOSParseXML X-Git-Tag: v8.10.0-rc1~217 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=407c4b12c782a95b13b689ba73344893eb69b67d;p=thirdparty%2Flibvirt.git conf: domain: Refactor cleanup in virSysinfoBIOSParseXML Register automatic cleanup for virSysinfoBIOSDef and use it to refactor the cleanup code paths in virSysinfoBIOSParseXML. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8b1a28c0d3..f8091b9fb5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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 diff --git a/src/util/virsysinfo.h b/src/util/virsysinfo.h index 97e0e18ddf..899193dc81 100644 --- a/src/util/virsysinfo.h +++ b/src/util/virsysinfo.h @@ -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);