[PATCH 02/14] conf: Refactor/rename virDomainDiskDefSourceParse

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux