virStorageVolDefParseXML: * Create "virStorageVolDefPtr def", and use ret to track the return value; frees the strings at "cleanup" label instead of freeing them in the middle. virStorageVolDefFormat: * Use macro NULLSTR --- src/conf/storage_conf.c | 93 ++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index dd55d2c..431a8eb 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -972,8 +972,8 @@ virStoragePoolDefParseNode(xmlDocPtr xml, virStoragePoolDefPtr def = NULL; if (STRNEQ((const char *)root->name, "pool")) { - virReportError(VIR_ERR_XML_ERROR, - "%s", _("unknown root element for storage pool")); + virReportError(VIR_ERR_XML_ERROR, "%s", + _("unknown root element for storage pool")); goto cleanup; } @@ -1149,8 +1149,8 @@ virStoragePoolDefFormat(virStoragePoolDefPtr def) type = virStoragePoolTypeToString(def->type); if (!type) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("unexpected pool type")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected pool type")); goto cleanup; } virBufferAsprintf(&buf, "<pool type='%s'>\n", type); @@ -1214,8 +1214,8 @@ virStorageSize(const char *unit, unsigned long long *ret) { if (virStrToLong_ull(val, NULL, 10, ret) < 0) { - virReportError(VIR_ERR_XML_ERROR, - "%s", _("malformed capacity element")); + virReportError(VIR_ERR_XML_ERROR, "%s", + _("malformed capacity element")); return -1; } /* off_t is signed, so you cannot create a file larger than 2**63 @@ -1230,64 +1230,62 @@ static virStorageVolDefPtr virStorageVolDefParseXML(virStoragePoolDefPtr pool, xmlXPathContextPtr ctxt) { - virStorageVolDefPtr ret; + virStorageVolDefPtr def; virStorageVolOptionsPtr options; char *allocation = NULL; char *capacity = NULL; char *unit = NULL; xmlNodePtr node; + virStorageVolDefPtr ret = NULL; options = virStorageVolOptionsForPoolType(pool->type); if (options == NULL) return NULL; - if (VIR_ALLOC(ret) < 0) { + if (VIR_ALLOC(def) < 0) { virReportOOMError(); return NULL; } - ret->name = virXPathString("string(./name)", ctxt); - if (ret->name == NULL) { - virReportError(VIR_ERR_XML_ERROR, - "%s", _("missing volume name element")); + def->name = virXPathString("string(./name)", ctxt); + if (def->name == NULL) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing volume name element")); goto cleanup; } /* Auto-generated so deliberately ignore */ - /* ret->key = virXPathString("string(./key)", ctxt); */ + /* def->key = virXPathString("string(./key)", ctxt); */ capacity = virXPathString("string(./capacity)", ctxt); unit = virXPathString("string(./capacity/@unit)", ctxt); if (capacity == NULL) { - virReportError(VIR_ERR_XML_ERROR, - "%s", _("missing capacity element")); + virReportError(VIR_ERR_XML_ERROR, "%s", + _("missing capacity element")); goto cleanup; } - if (virStorageSize(unit, capacity, &ret->capacity) < 0) + if (virStorageSize(unit, capacity, &def->capacity) < 0) goto cleanup; - VIR_FREE(capacity); VIR_FREE(unit); allocation = virXPathString("string(./allocation)", ctxt); if (allocation) { unit = virXPathString("string(./allocation/@unit)", ctxt); - if (virStorageSize(unit, allocation, &ret->allocation) < 0) + if (virStorageSize(unit, allocation, &def->allocation) < 0) goto cleanup; - VIR_FREE(allocation); - VIR_FREE(unit); } else { - ret->allocation = ret->capacity; + def->allocation = def->capacity; } - ret->target.path = virXPathString("string(./target/path)", ctxt); + def->target.path = virXPathString("string(./target/path)", ctxt); if (options->formatFromString) { char *format = virXPathString("string(./target/format/@type)", ctxt); if (format == NULL) - ret->target.format = options->defaultFormat; + def->target.format = options->defaultFormat; else - ret->target.format = (options->formatFromString)(format); + def->target.format = (options->formatFromString)(format); - if (ret->target.format < 0) { + if (def->target.format < 0) { virReportError(VIR_ERR_XML_ERROR, _("unknown volume format type %s"), format); VIR_FREE(format); @@ -1296,28 +1294,28 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool, VIR_FREE(format); } - if (virStorageDefParsePerms(ctxt, &ret->target.perms, + if (virStorageDefParsePerms(ctxt, &def->target.perms, "./target/permissions", DEFAULT_VOL_PERM_MODE) < 0) goto cleanup; node = virXPathNode("./target/encryption", ctxt); if (node != NULL) { - ret->target.encryption = virStorageEncryptionParseNode(ctxt->doc, + def->target.encryption = virStorageEncryptionParseNode(ctxt->doc, node); - if (ret->target.encryption == NULL) + if (def->target.encryption == NULL) goto cleanup; } - ret->backingStore.path = virXPathString("string(./backingStore/path)", ctxt); + def->backingStore.path = virXPathString("string(./backingStore/path)", ctxt); if (options->formatFromString) { char *format = virXPathString("string(./backingStore/format/@type)", ctxt); if (format == NULL) - ret->backingStore.format = options->defaultFormat; + def->backingStore.format = options->defaultFormat; else - ret->backingStore.format = (options->formatFromString)(format); + def->backingStore.format = (options->formatFromString)(format); - if (ret->backingStore.format < 0) { + if (def->backingStore.format < 0) { virReportError(VIR_ERR_XML_ERROR, _("unknown volume format type %s"), format); VIR_FREE(format); @@ -1326,19 +1324,19 @@ virStorageVolDefParseXML(virStoragePoolDefPtr pool, VIR_FREE(format); } - if (virStorageDefParsePerms(ctxt, &ret->backingStore.perms, + if (virStorageDefParsePerms(ctxt, &def->backingStore.perms, "./backingStore/permissions", DEFAULT_VOL_PERM_MODE) < 0) goto cleanup; - return ret; - + ret = def; cleanup: VIR_FREE(allocation); VIR_FREE(capacity); VIR_FREE(unit); - virStorageVolDefFree(ret); - return NULL; + if (!ret) + virStorageVolDefFree(ret); + return ret; } virStorageVolDefPtr @@ -1350,8 +1348,8 @@ virStorageVolDefParseNode(virStoragePoolDefPtr pool, virStorageVolDefPtr def = NULL; if (STRNEQ((const char *)root->name, "volume")) { - virReportError(VIR_ERR_XML_ERROR, - "%s", _("unknown root element for storage vol")); + virReportError(VIR_ERR_XML_ERROR, "%s", + _("unknown root element for storage vol")); goto cleanup; } @@ -1481,7 +1479,7 @@ virStorageVolDefFormat(virStoragePoolDefPtr pool, virBufferAddLit(&buf, "<volume>\n"); virBufferAsprintf(&buf," <name>%s</name>\n", def->name); - virBufferAsprintf(&buf," <key>%s</key>\n", def->key ? def->key : "(null)"); + virBufferAsprintf(&buf," <key>%s</key>\n", NULLSTR(def->key)); virBufferAddLit(&buf, " <source>\n"); if (def->source.nextent) { @@ -1658,8 +1656,8 @@ virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, } if (virMutexInit(&pool->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot initialize mutex")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("cannot initialize mutex")); VIR_FREE(pool); return NULL; } @@ -1694,7 +1692,8 @@ virStoragePoolObjLoad(virStoragePoolObjListPtr pools, if (!virFileMatchesNameSuffix(file, def->name, ".xml")) { virReportError(VIR_ERR_XML_ERROR, - _("Storage pool config filename '%s' does not match pool name '%s'"), + _("Storage pool config filename '%s' " + "does not match pool name '%s'"), path, def->name); virStoragePoolDefFree(def); return NULL; @@ -1807,8 +1806,8 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, } if (!(xml = virStoragePoolDefFormat(def))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("failed to generate XML")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to generate XML")); return -1; } @@ -1870,8 +1869,8 @@ virStoragePoolSourceListFormat(virStoragePoolSourceListPtr def) type = virStoragePoolTypeToString(def->type); if (!type) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("unexpected pool type")); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("unexpected pool type")); goto cleanup; } -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list