From: Peter Krempa Date: Thu, 12 Oct 2023 13:07:52 +0000 (+0200) Subject: virDomainDiskSourcePoolDefParse: Refactor cleanup X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=d8fd9904ff13964979af074858b8aa99dac2a919;p=libvirt.git virDomainDiskSourcePoolDefParse: Refactor cleanup Register autoptr cleanup function for virStorageSourcePoolDef and refactor the parser to simplify the logic. 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 d7f167a469..3e0989e2e8 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7005,44 +7005,31 @@ virDomainLeaseDefParseXML(xmlNodePtr node, return NULL; } -static int -virDomainDiskSourcePoolDefParse(xmlNodePtr node, - virStorageSourcePoolDef **srcpool) +static virStorageSourcePoolDef * +virDomainDiskSourcePoolDefParse(xmlNodePtr node) { - virStorageSourcePoolDef *source; - int ret = -1; - - *srcpool = NULL; - - source = g_new0(virStorageSourcePoolDef, 1); + g_autoptr(virStorageSourcePoolDef) source = g_new0(virStorageSourcePoolDef, 1); source->pool = virXMLPropString(node, "pool"); source->volume = virXMLPropString(node, "volume"); - /* CD-ROM and Floppy allows no source */ - if (!source->pool && !source->volume) { - ret = 0; - goto cleanup; - } + /* CD-ROM and Floppy allows no source -> empty pool */ + if (!source->pool && !source->volume) + return g_steal_pointer(&source); if (!source->pool || !source->volume) { virReportError(VIR_ERR_XML_ERROR, "%s", _("'pool' and 'volume' must be specified together for 'pool' type source")); - goto cleanup; + return NULL; } if (virXMLPropEnum(node, "mode", virStorageSourcePoolModeTypeFromString, VIR_XML_PROP_NONZERO, &source->mode) < 0) - goto cleanup; - - *srcpool = g_steal_pointer(&source); - ret = 0; + return NULL; - cleanup: - virStorageSourcePoolDefFree(source); - return ret; + return g_steal_pointer(&source); } @@ -7482,7 +7469,7 @@ virDomainStorageSourceParse(xmlNodePtr node, return -1; break; case VIR_STORAGE_TYPE_VOLUME: - if (virDomainDiskSourcePoolDefParse(node, &src->srcpool) < 0) + if (!(src->srcpool = virDomainDiskSourcePoolDefParse(node))) return -1; break; case VIR_STORAGE_TYPE_NVME: @@ -8660,7 +8647,7 @@ virDomainFSDefParseXML(virDomainXMLOption *xmlopt, units = virXMLPropString(source_node, "units"); } else if (def->type == VIR_DOMAIN_FS_TYPE_VOLUME) { def->src->type = VIR_STORAGE_TYPE_VOLUME; - if (virDomainDiskSourcePoolDefParse(source_node, &def->src->srcpool) < 0) + if (!(def->src->srcpool = virDomainDiskSourcePoolDefParse(source_node))) goto error; } } diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index bfa8d625e5..0cd5cd0192 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -498,6 +498,7 @@ virStorageSourceInitChainElement(virStorageSource *newelem, void virStorageSourcePoolDefFree(virStorageSourcePoolDef *def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSourcePoolDef, virStorageSourcePoolDefFree); void virStorageSourceClear(virStorageSource *def);