[PATCH 2/5] virsh: domain: Refactor XML handling for disk changes

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

 



Use virXMLNodeGetSubelement to find needed subelements.

In virshUpdateDiskXML this commit removes the code which keeps XML
formatting tidy, but that is not needed for the code to format proper
XMLs.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 tools/virsh-domain.c | 63 +++++---------------------------------------
 1 file changed, 7 insertions(+), 56 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index e0776c991f..541a799aaf 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -12641,19 +12641,13 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
 static void
 virshDiskDropBackingStore(xmlNodePtr disk_node)
 {
-    xmlNodePtr tmp;
+    xmlNodePtr tmp = virXMLNodeGetSubelement(disk_node, "backingStore");

-    for (tmp = disk_node->children; tmp; tmp = tmp->next) {
-        if (tmp->type != XML_ELEMENT_NODE)
-            continue;
-
-        if (virXMLNodeNameEqual(tmp, "backingStore")) {
-            xmlUnlinkNode(tmp);
-            xmlFreeNode(tmp);
+    if (!tmp)
+        return;

-            return;
-        }
-    }
+    xmlUnlinkNode(tmp);
+    xmlFreeNode(tmp);
 }


@@ -12753,10 +12747,7 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
                    const char *target,
                    virshUpdateDiskXMLType type)
 {
-    xmlNodePtr tmp = NULL;
     xmlNodePtr source = NULL;
-    xmlNodePtr target_node = NULL;
-    xmlNodePtr text_node = NULL;
     g_autofree char *device_type = NULL;
     char *ret = NULL;
     g_autofree char *startupPolicy = NULL;
@@ -12773,33 +12764,7 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
         return NULL;
     }

-    /* find the current source subelement */
-    for (tmp = disk_node->children; tmp; tmp = tmp->next) {
-        /*
-         * Save the last text node before the <target/>.  The
-         * reasoning behind this is that the target node will be
-         * present in this case and also has a proper indentation.
-         */
-        if (!target_node && tmp->type == XML_TEXT_NODE)
-            text_node = tmp;
-
-        /*
-         * We need only element nodes from now on.
-         */
-        if (tmp->type != XML_ELEMENT_NODE)
-            continue;
-
-        if (!source && virXMLNodeNameEqual(tmp, "source"))
-            source = tmp;
-        else if (!target_node && virXMLNodeNameEqual(tmp, "target"))
-            target_node = tmp;
-
-        /*
-         * We've found all we needed.
-         */
-        if (source && target_node)
-            break;
-    }
+    source = virXMLNodeGetSubelement(disk_node, "source");

     if (type == VIRSH_UPDATE_DISK_XML_EJECT) {
         if (!source) {
@@ -12852,21 +12817,7 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
         if (startupPolicy)
             xmlNewProp(source, BAD_CAST "startupPolicy", BAD_CAST startupPolicy);

-        /*
-         * So that the output XML looks nice in case anyone calls
-         * 'change-media' with '--print-xml', let's attach the source
-         * before target...
-         */
-        xmlAddPrevSibling(target_node, source);
-
-        /*
-         * ... and duplicate the text node doing the indentation just
-         * so it's more easily readable.  And don't make it fatal.
-         */
-        if ((tmp = xmlCopyNode(text_node, 0))) {
-            if (!xmlAddPrevSibling(target_node, tmp))
-                xmlFreeNode(tmp);
-        }
+        xmlAddChild(disk_node, source);
     }

     if (!(ret = virXMLNodeToString(NULL, disk_node))) {
-- 
2.41.0




[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