This allows it to be used by the VIR_*_ELEMENT macros.
Also use them for parsing the definiton and remove the redundant
freeing of 'nodeset' before jumping to the cleanup label.
---
src/conf/storage_conf.c | 23 ++-
src/conf/storage_conf.h | 2 +-
2 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 9c2962f..39fb416 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -642,23 +642,20 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
if (nsource 0)
goto cleanup;
-if (nsource 0) {
-if (VIR_ALLOC_N(source-devices, nsource) 0) {
-VIR_FREE(nodeset);
+for (i = 0; i nsource; i++) {
+virStoragePoolSourceDevice dev = { .path = NULL };
+dev.path = virXMLPropString(nodeset[i], path);
+
+if (dev.path == NULL) {
+virReportError(VIR_ERR_XML_ERROR, %s,
+ _(missing storage pool source device path));
goto cleanup;
}
-for (i = 0; i nsource; i++) {
-char *path = virXMLPropString(nodeset[i], path);
-if (path == NULL) {
-VIR_FREE(nodeset);
-virReportError(VIR_ERR_XML_ERROR, %s,
- _(missing storage pool source device path));
-goto cleanup;
-}
-source-devices[i].path = path;
+if (VIR_APPEND_ELEMENT(source-devices, source-ndevice, dev) 0) {
+virStoragePoolSourceDeviceClear(dev);
+goto cleanup;
}
-source-ndevice = nsource;
}
source-dir = virXPathString(string(./dir/@path), ctxt);
diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h
index 636c9aa..e410f41 100644
--- a/src/conf/storage_conf.h
+++ b/src/conf/storage_conf.h
@@ -266,7 +266,7 @@ struct _virStoragePoolSource {
virStoragePoolSourceHostPtr hosts;
/* And either one or more devices ... */
-int ndevice;
+size_t ndevice;
virStoragePoolSourceDevicePtr devices;
/* Or a directory */
--
1.8.3.2
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list