Make the function more usable by returning the full disk definition and
fix the only caller for the new semantics. The new name for the function
is virDomainDiskDefParse.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 33 ++++++++++++---------------------
src/conf/domain_conf.h | 8 ++++----
src/libvirt_private.syms | 2 +-
src/qemu/qemu_driver.c | 9 +++++++--
4 files changed, 24 insertions(+), 28 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ae7c0d9b71..e2bad48cc8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -15864,44 +15864,35 @@ virDomainDeviceDefParse(const char *xmlStr,
}
-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;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 61379e50fe..650901c1f4 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2935,10 +2935,10 @@ virDomainDeviceDefPtr virDomainDeviceDefParse(const char *xmlStr,
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,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 03fe3b315f..96a0a6de52 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -315,7 +315,7 @@ virDomainDiskDefCheckDuplicateInfo;
virDomainDiskDefForeachPath;
virDomainDiskDefFree;
virDomainDiskDefNew;
-virDomainDiskDefSourceParse;
+virDomainDiskDefParse;
virDomainDiskDetectZeroesTypeFromString;
virDomainDiskDetectZeroesTypeToString;
virDomainDiskDeviceTypeToString;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 7bcc4936de..4e9add0ef7 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17456,6 +17456,7 @@ qemuDomainBlockCopy(virDomainPtr dom, const char *disk, const char
*destxml,
unsigned long long bandwidth = 0;
unsigned int granularity = 0;
unsigned long long buf_size = 0;
+ virDomainDiskDefPtr diskdef = NULL;
virStorageSourcePtr dest = NULL;
size_t i;
@@ -17508,14 +17509,18 @@ qemuDomainBlockCopy(virDomainPtr dom, const char *disk, const
char *destxml,
}
}
- 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;
}
--
2.16.2