From: Peter Krempa Date: Wed, 6 Nov 2013 14:15:18 +0000 (+0100) Subject: conf: Refactor virDomainDiskSourcePoolDefParse X-Git-Tag: v1.2.0-rc1~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e037015a41a31534aca5fde207dc81b94497456;p=thirdparty%2Flibvirt.git conf: Refactor virDomainDiskSourcePoolDefParse For some strange reason virDomainDiskSourcePoolDefParse accessed def of the disk and allocated the pool object in it. To avoid the need to carry over the disk definition object, refactor this function to return the allocated object instead. --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 78496937d4..50ce44dba7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4683,49 +4683,48 @@ cleanup: static int virDomainDiskSourcePoolDefParse(xmlNodePtr node, - virDomainDiskDefPtr def) + virDomainDiskSourcePoolDefPtr *srcpool) { - char *pool = NULL; - char *volume = NULL; char *mode = NULL; + virDomainDiskSourcePoolDefPtr source; int ret = -1; - pool = virXMLPropString(node, "pool"); - volume = virXMLPropString(node, "volume"); + *srcpool = NULL; + + if (VIR_ALLOC(source) < 0) + return -1; + + source->pool = virXMLPropString(node, "pool"); + source->volume = virXMLPropString(node, "volume"); mode = virXMLPropString(node, "mode"); /* CD-ROM and Floppy allows no source */ - if (!pool && !volume) - return 0; + if (!source->pool && !source->volume) { + ret = 0; + goto cleanup; + } - if (!pool || !volume) { + if (!source->pool || !source->volume) { virReportError(VIR_ERR_XML_ERROR, "%s", _("'pool' and 'volume' must be specified together " "for 'pool' type source")); goto cleanup; } - if (VIR_ALLOC(def->srcpool) < 0) - goto cleanup; - - if (mode && (def->srcpool->mode = - virDomainDiskSourcePoolModeTypeFromString(mode)) <= 0) { + if (mode && + (source->mode = virDomainDiskSourcePoolModeTypeFromString(mode)) <= 0) { virReportError(VIR_ERR_XML_ERROR, _("unknown source mode '%s' for volume type disk"), mode); goto cleanup; } - def->srcpool->pool = pool; - pool = NULL; - def->srcpool->volume = volume; - volume = NULL; - + *srcpool = source; + source = NULL; ret = 0; cleanup: - VIR_FREE(pool); - VIR_FREE(volume); + virDomainDiskSourcePoolDefFree(source); VIR_FREE(mode); return ret; } @@ -4916,7 +4915,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, } break; case VIR_DOMAIN_DISK_TYPE_VOLUME: - if (virDomainDiskSourcePoolDefParse(cur, def) < 0) + if (virDomainDiskSourcePoolDefParse(cur, &def->srcpool) < 0) goto error; break; default: