Changes:
* Add a new goto label "error"
* Free the strings at "cleanup"
* Remove the unnecessary frees
---
src/conf/storage_conf.c | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 6f0ed74..4c08cea 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1253,7 +1253,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
if (ret->name == NULL) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing volume name element"));
- goto cleanup;
+ goto error;
}
/* Auto-generated so deliberately ignore */
@@ -1264,20 +1264,17 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
if (capacity == NULL) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing capacity element"));
- goto cleanup;
+ goto error;
}
if (virStorageSize(unit, capacity, &ret->capacity) < 0)
- goto cleanup;
- VIR_FREE(capacity);
+ goto error;
VIR_FREE(unit);
allocation = virXPathString("string(./allocation)", ctxt);
if (allocation) {
unit = virXPathString("string(./allocation/@unit)", ctxt);
if (virStorageSize(unit, allocation, &ret->allocation) < 0)
- goto cleanup;
- VIR_FREE(allocation);
- VIR_FREE(unit);
+ goto error;
} else {
ret->allocation = ret->capacity;
}
@@ -1294,7 +1291,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
virReportError(VIR_ERR_XML_ERROR,
_("unknown volume format type %s"), format);
VIR_FREE(format);
- goto cleanup;
+ goto error;
}
VIR_FREE(format);
}
@@ -1302,14 +1299,14 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
if (virStorageDefParsePerms(ctxt, &ret->target.perms,
"./target/permissions",
DEFAULT_VOL_PERM_MODE) < 0)
- goto cleanup;
+ goto error;
node = virXPathNode("./target/encryption", ctxt);
if (node != NULL) {
ret->target.encryption = virStorageEncryptionParseNode(ctxt->doc,
node);
if (ret->target.encryption == NULL)
- goto cleanup;
+ goto error;
}
ret->backingStore.path = virXPathString("string(./backingStore/path)",
ctxt);
@@ -1324,7 +1321,7 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
virReportError(VIR_ERR_XML_ERROR,
_("unknown volume format type %s"), format);
VIR_FREE(format);
- goto cleanup;
+ goto error;
}
VIR_FREE(format);
}
@@ -1332,16 +1329,18 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool,
if (virStorageDefParsePerms(ctxt, &ret->backingStore.perms,
"./backingStore/permissions",
DEFAULT_VOL_PERM_MODE) < 0)
- goto cleanup;
-
- return ret;
+ goto error;
cleanup:
VIR_FREE(allocation);
VIR_FREE(capacity);
VIR_FREE(unit);
+ return ret;
+
+error:
virStorageVolDefFree(ret);
- return NULL;
+ ret = NULL;
+ goto cleanup;
}
virStorageVolDefPtr
--
1.8.1.4