]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Refactoring virDomainChrDefParseXML() to use XPath
authorKristina Hanicova <khanicov@redhat.com>
Tue, 4 May 2021 11:40:08 +0000 (13:40 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 5 May 2021 07:12:11 +0000 (09:12 +0200)
Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c

index 07a879613ccdc39d3349b3bd68e00101fe3c9fe6..122c587a2ea56a3b78ce410af046a7ee1b826141 100644 (file)
@@ -11531,11 +11531,13 @@ virDomainChrDefParseXML(virDomainXMLOption *xmlopt,
                         xmlNodePtr node,
                         unsigned int flags)
 {
-    xmlNodePtr cur;
+    xmlNodePtr target;
     const char *nodeName;
     virDomainChrDef *def;
-    bool seenTarget = false;
     g_autofree char *type = NULL;
+    VIR_XPATH_NODE_AUTORESTORE(ctxt)
+
+    ctxt->node = node;
 
     if (!(def = virDomainChrDefNew(xmlopt)))
         return NULL;
@@ -11558,21 +11560,12 @@ virDomainChrDefParseXML(virDomainXMLOption *xmlopt,
         goto error;
     }
 
-    cur = node->children;
-    while (cur != NULL) {
-        if (cur->type == XML_ELEMENT_NODE) {
-            if (virXMLNodeNameEqual(cur, "target")) {
-                seenTarget = true;
-                if (virDomainChrDefParseTargetXML(def, cur, ctxt, flags) < 0)
-                    goto error;
-            }
-        }
-        cur = cur->next;
-    }
-
-    if (!seenTarget &&
-        ((def->targetType = virDomainChrDefaultTargetType(def->deviceType)) < 0))
+    if ((target = virXPathNode("./target", ctxt))) {
+        if (virDomainChrDefParseTargetXML(def, target, ctxt, flags) < 0)
+            goto error;
+    } else if ((def->targetType = virDomainChrDefaultTargetType(def->deviceType)) < 0) {
         goto error;
+    }
 
     if (virDomainChrSourceDefParseXML(def->source, node, flags, def,
                                       ctxt) < 0)