}
-virStorageSourcePtr
-virDomainDiskDefSourceParse(const char *xmlStr,
- const virDomainDef *def,
- virDomainXMLOptionPtr xmlopt,
- unsigned int flags)
+virDomainDiskDefPtr
+virDomainDiskDefParse(const char *xmlStr,
+ const virDomainDef *def,
+ virDomainXMLOptionPtr xmlopt,
+ unsigned int flags)
{
xmlDocPtr xml;
- xmlNodePtr node;
xmlXPathContextPtr ctxt = NULL;
virDomainDiskDefPtr disk = NULL;
- virStorageSourcePtr ret = NULL;
if (!(xml = virXMLParseStringCtxt(xmlStr, _("(disk_definition)"), &ctxt)))
goto cleanup;
- node = ctxt->node;
- if (!virXMLNodeNameEqual(node, "disk")) {
+ if (!virXMLNodeNameEqual(ctxt->node, "disk")) {
virReportError(VIR_ERR_XML_ERROR,
_("expecting root element of 'disk', not '%s'"),
- node->name);
+ ctxt->node->name);
goto cleanup;
}
- flags |= VIR_DOMAIN_DEF_PARSE_DISK_SOURCE;
- if (!(disk = virDomainDiskDefParseXML(xmlopt, node, ctxt,
- NULL, def->seclabels,
- def->nseclabels,
- flags)))
- goto cleanup;
-
- ret = disk->src;
- disk->src = NULL;
+ disk = virDomainDiskDefParseXML(xmlopt, ctxt->node, ctxt,
+ NULL, def->seclabels,
+ def->nseclabels,
+ flags);
cleanup:
- virDomainDiskDefFree(disk);
xmlFreeDoc(xml);
xmlXPathFreeContext(ctxt);
- return ret;
+ return disk;
}
virCapsPtr caps,
virDomainXMLOptionPtr xmlopt,
unsigned int flags);
-virStorageSourcePtr virDomainDiskDefSourceParse(const char *xmlStr,
- const virDomainDef *def,
- virDomainXMLOptionPtr xmlopt,
- unsigned int flags);
+virDomainDiskDefPtr virDomainDiskDefParse(const char *xmlStr,
+ const virDomainDef *def,
+ virDomainXMLOptionPtr xmlopt,
+ unsigned int flags);
virDomainDefPtr virDomainDefParseString(const char *xmlStr,
virCapsPtr caps,
virDomainXMLOptionPtr xmlopt,
virDomainDiskDefForeachPath;
virDomainDiskDefFree;
virDomainDiskDefNew;
-virDomainDiskDefSourceParse;
+virDomainDiskDefParse;
virDomainDiskDetectZeroesTypeFromString;
virDomainDiskDetectZeroesTypeToString;
virDomainDiskDeviceTypeToString;
unsigned long long bandwidth = 0;
unsigned int granularity = 0;
unsigned long long buf_size = 0;
+ virDomainDiskDefPtr diskdef = NULL;
virStorageSourcePtr dest = NULL;
size_t i;
}
}
- if (!(dest = virDomainDiskDefSourceParse(destxml, vm->def, driver->xmlopt,
- VIR_DOMAIN_DEF_PARSE_INACTIVE)))
+ if (!(diskdef = virDomainDiskDefParse(destxml, vm->def, driver->xmlopt,
+ VIR_DOMAIN_DEF_PARSE_INACTIVE |
+ VIR_DOMAIN_DEF_PARSE_DISK_SOURCE)))
goto cleanup;
+ VIR_STEAL_PTR(dest, diskdef->src);
+
ret = qemuDomainBlockCopyCommon(vm, dom->conn, disk, dest, bandwidth,
granularity, buf_size, flags, false);
cleanup:
+ virDomainDiskDefFree(diskdef);
virDomainObjEndAPI(&vm);
return ret;
}