Re: [PATCH 2/7] virDomainDiskSourcePoolDefParse: Refactor cleanup

2023-10-13 Thread Ján Tomko

On a Thursday in 2023, Peter Krempa wrote:

Register autoptr cleanup function for virStorageSourcePoolDef and
refactor the parser to simplify the logic.

Signed-off-by: Peter Krempa 
---
src/conf/domain_conf.c | 35 +++---
src/conf/storage_source_conf.h |  1 +
2 files changed, 12 insertions(+), 24 deletions(-)



Reviewed-by: Ján Tomko 

Jano


signature.asc
Description: PGP signature


[PATCH 2/7] virDomainDiskSourcePoolDefParse: Refactor cleanup

2023-10-12 Thread Peter Krempa
Register autoptr cleanup function for virStorageSourcePoolDef and
refactor the parser to simplify the logic.

Signed-off-by: Peter Krempa 
---
 src/conf/domain_conf.c | 35 +++---
 src/conf/storage_source_conf.h |  1 +
 2 files changed, 12 insertions(+), 24 deletions(-)

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();

 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,
>mode) < 0)
-goto cleanup;
-
-*srcpool = g_steal_pointer();
-ret = 0;
+return NULL;

- cleanup:
-virStorageSourcePoolDefFree(source);
-return ret;
+return g_steal_pointer();
 }


@@ -7482,7 +7469,7 @@ virDomainStorageSourceParse(xmlNodePtr node,
 return -1;
 break;
 case VIR_STORAGE_TYPE_VOLUME:
-if (virDomainDiskSourcePoolDefParse(node, >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, 
>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);
-- 
2.41.0