From: Peter Krempa Date: Fri, 23 Sep 2022 11:42:44 +0000 (+0200) Subject: conf: domain: Simplify validation in virDomainDefParse X-Git-Tag: v8.9.0-rc1~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a1c20c3e5e156ca23ed005db8acaddb06efcf07;p=thirdparty%2Flibvirt.git conf: domain: Simplify validation in virDomainDefParse Use virXMLParse's features to validate the top level element and fetch the XPath context. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 03f4b2fe33..bd882039e7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19080,29 +19080,19 @@ virDomainDefParse(const char *xmlStr, unsigned int flags) { g_autoptr(xmlDoc) xml = NULL; - virDomainDef *def = NULL; + g_autoptr(xmlXPathContext) ctxt = NULL; int keepBlanksDefault = xmlKeepBlanksDefault(0); - xmlNodePtr root; bool validate = flags & VIR_DOMAIN_DEF_PARSE_VALIDATE_SCHEMA; - if (!(xml = virXMLParse(filename, xmlStr, _("(domain_definition)"), - NULL, NULL, "domain.rng", validate))) - goto cleanup; + xml = virXMLParse(filename, xmlStr, _("(domain_definition)"), + "domain", &ctxt, "domain.rng", validate); - root = xmlDocGetRootElement(xml); - if (!virXMLNodeNameEqual(root, "domain")) { - virReportError(VIR_ERR_XML_ERROR, - _("unexpected root element <%s>, " - "expecting "), - root->name); - goto cleanup; - } + xmlKeepBlanksDefault(keepBlanksDefault); - def = virDomainDefParseNode(xml, root, xmlopt, parseOpaque, flags); + if (!xml) + return NULL; - cleanup: - xmlKeepBlanksDefault(keepBlanksDefault); - return def; + return virDomainDefParseNode(xml, ctxt->node, xmlopt, parseOpaque, flags); } virDomainDef *