From 7fefde1f445618289c70876b55fb8b2d85b865d6 Mon Sep 17 00:00:00 2001 From: Kristina Hanicova Date: Tue, 4 May 2021 13:40:08 +0200 Subject: [PATCH] Refactoring virDomainChrDefParseXML() to use XPath Signed-off-by: Kristina Hanicova Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 07a879613c..122c587a2e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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)