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 <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2022-09-23 13:42:44 +02:00
parent d4b6496f24
commit 5a1c20c3e5

View File

@ -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 <domain>"),
root->name);
goto cleanup;
}
def = virDomainDefParseNode(xml, root, xmlopt, parseOpaque, flags);
cleanup:
xmlKeepBlanksDefault(keepBlanksDefault);
return def;
if (!xml)
return NULL;
return virDomainDefParseNode(xml, ctxt->node, xmlopt, parseOpaque, flags);
}
virDomainDef *