提交 6e037015 编写于 作者: P Peter Krempa

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.
上级 adb44955
......@@ -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:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册