From fc7e1b2f03cfe2a5f3fce737390548505382d8ed Mon Sep 17 00:00:00 2001 From: Kristina Hanicova Date: Tue, 4 May 2021 13:40:12 +0200 Subject: [PATCH] Refactoring virDomainVideoDriverDefParseXML() to use XPath Signed-off-by: Kristina Hanicova Signed-off-by: Michal Privoznik Reviewed-by: Michal Privoznik --- src/conf/domain_conf.c | 32 +++++++++++--------------------- src/conf/domain_conf.h | 2 +- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8cceb055c0..82581a318c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14313,34 +14313,24 @@ virDomainVideoResolutionDefParseXML(xmlNodePtr node) static virDomainVideoDriverDef * virDomainVideoDriverDefParseXML(xmlNodePtr node, - xmlXPathContextPtr ctxt G_GNUC_UNUSED) + xmlXPathContextPtr ctxt) { - xmlNodePtr cur; virDomainVideoDriverDef *def; - int val; - g_autofree char *vgaconf = NULL; + unsigned int val; + xmlNodePtr driver = NULL; + VIR_XPATH_NODE_AUTORESTORE(ctxt) - cur = node->children; - while (cur != NULL) { - if (cur->type == XML_ELEMENT_NODE) { - if (!vgaconf && - virXMLNodeNameEqual(cur, "driver")) { - vgaconf = virXMLPropString(cur, "vgaconf"); - } - } - cur = cur->next; - } + ctxt->node = node; - if (!vgaconf) + if (!(driver = virXPathNode("./driver", ctxt))) + return NULL; + + if (virXMLPropEnum(driver, "vgaconf", + virDomainVideoVGAConfTypeFromString, + VIR_XML_PROP_NONZERO, &val) < 0) return NULL; def = g_new0(virDomainVideoDriverDef, 1); - - if ((val = virDomainVideoVGAConfTypeFromString(vgaconf)) <= 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("unknown vgaconf value '%s'"), vgaconf); - return def; - } def->vgaconf = val; return def; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0874c9007f..95d0516279 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1665,7 +1665,7 @@ struct _virDomainVideoResolutionDef { }; struct _virDomainVideoDriverDef { - virDomainVideoVGAConf vgaconf; + virDomainVideoVGAConf vgaconf; char *vhost_user_binary; };