Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
src/conf/storage_conf.c | 41 ++++++++++++++++++-----------------------
1 file changed, 18 insertions(+), 23 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 435a029b4e..10b46ac368 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -523,8 +523,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
int pool_type,
xmlNodePtr node)
{
- int ret = -1;
- xmlNodePtr relnode, authnode;
+ xmlNodePtr authnode;
xmlNodePtr adapternode;
int nsource;
size_t i;
@@ -534,18 +533,18 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
g_autofree char *ver = NULL;
g_autofree xmlNodePtr *nodeset = NULL;
g_autofree char *sourcedir = NULL;
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
- relnode = ctxt->node;
ctxt->node = node;
if ((options = virStoragePoolOptionsForPoolType(pool_type)) == NULL)
- goto cleanup;
+ return -1;
source->name = virXPathString("string(./name)", ctxt);
if (pool_type == VIR_STORAGE_POOL_RBD && source->name == NULL) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("element 'name' is mandatory for RBD pool"));
- goto cleanup;
+ return -1;
}
if (options->formatFromString) {
@@ -560,12 +559,12 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
if (source->format < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown pool format type %s"), format);
- goto cleanup;
+ return -1;
}
}
if ((n = virXPathNodeSet("./host", ctxt, &nodeset)) < 0)
- goto cleanup;
+ return -1;
if (n) {
source->hosts = g_new0(virStoragePoolSourceHost, n);
@@ -576,12 +575,12 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
if (!source->hosts[i].name) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing storage pool host name"));
- goto cleanup;
+ return -1;
}
if (virXMLPropInt(nodeset[i], "port", 10, VIR_XML_PROP_NONE,
&source->hosts[i].port, 0) < 0)
- goto cleanup;
+ return -1;
}
}
@@ -591,7 +590,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
nsource = virXPathNodeSet("./device", ctxt, &nodeset);
if (nsource < 0)
- goto cleanup;
+ return -1;
for (i = 0; i < nsource; i++) {
virStoragePoolSourceDevice dev = { .path = NULL };
@@ -600,19 +599,19 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
if (dev.path == NULL) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing storage pool source device path"));
- goto cleanup;
+ return -1;
}
if (virXMLPropTristateBool(nodeset[i], "part_separator",
VIR_XML_PROP_NONE,
&dev.part_separator) < 0) {
virStoragePoolSourceDeviceClear(&dev);
- goto cleanup;
+ return -1;
}
if (VIR_APPEND_ELEMENT(source->devices, source->ndevice, dev) < 0) {
virStoragePoolSourceDeviceClear(&dev);
- goto cleanup;
+ return -1;
}
}
@@ -626,17 +625,17 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
if ((adapternode = virXPathNode("./adapter", ctxt))) {
if (virStorageAdapterParseXML(&source->adapter, adapternode, ctxt) <
0)
- goto cleanup;
+ return -1;
}
if ((authnode = virXPathNode("./auth", ctxt))) {
if (!(authdef = virStorageAuthDefParse(authnode, ctxt)))
- goto cleanup;
+ return -1;
if (authdef->authType == VIR_STORAGE_AUTH_TYPE_NONE) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("storage pool missing auth type"));
- goto cleanup;
+ return -1;
}
source->auth = g_steal_pointer(&authdef);
@@ -650,24 +649,20 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
_("storage pool protocol ver unsupported for "
"pool type '%s'"),
virStoragePoolFormatFileSystemNetTypeToString(source->format));
- goto cleanup;
+ return -1;
}
if (virStrToLong_uip(ver, NULL, 0, &source->protocolVer) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("storage pool protocol ver '%s' is
malformed"),
ver);
- goto cleanup;
+ return -1;
}
}
source->vendor = virXPathString("string(./vendor/@name)", ctxt);
source->product = virXPathString("string(./product/@name)", ctxt);
- ret = 0;
- cleanup:
- ctxt->node = relnode;
-
- return ret;
+ return 0;
}
--
2.26.3