]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: domain: Simplify validation in virDomainDefParse
authorPeter Krempa <pkrempa@redhat.com>
Fri, 23 Sep 2022 11:42:44 +0000 (13:42 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 6 Oct 2022 08:54:25 +0000 (10:54 +0200)
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>
src/conf/domain_conf.c

index 03f4b2fe332eb84ef8c2b0734f95d9554179f084..bd882039e77953b386ecc4f9de1a1d61025531cd 100644 (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;
-    }
+    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 *