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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list