[libvirt] [PATCHv2 4/5] Introduce virXMLValidatorValidate

Ján Tomko jtomko at redhat.com
Tue Jun 7 18:07:31 UTC 2016


Split out the code for XML validation into a new function.
---
 src/libvirt_private.syms |  1 +
 src/util/virxml.c        | 27 +++++++++++++++++++++------
 src/util/virxml.h        |  4 ++++
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index e631c14..4d56d1f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2567,6 +2567,7 @@ virXMLSaveFile;
 virXMLValidateAgainstSchema;
 virXMLValidatorFree;
 virXMLValidatorInit;
+virXMLValidatorValidate;
 virXPathBoolean;
 virXPathInt;
 virXPathLong;
diff --git a/src/util/virxml.c b/src/util/virxml.c
index 19163db..aa97940 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -1156,15 +1156,11 @@ virXMLValidatorInit(const char *schemafile)
 
 
 int
-virXMLValidateAgainstSchema(const char *schemafile,
-                            xmlDocPtr doc)
+virXMLValidatorValidate(virXMLValidatorPtr validator,
+                        xmlDocPtr doc)
 {
-    virXMLValidatorPtr validator = NULL;
     int ret = -1;
 
-    if (!(validator = virXMLValidatorInit(schemafile)))
-        return -1;
-
     if (xmlRelaxNGValidateDoc(validator->rngValid, doc) != 0) {
         virReportError(VIR_ERR_XML_INVALID_SCHEMA,
                        _("Unable to validate doc against %s\n%s"),
@@ -1174,7 +1170,26 @@ virXMLValidateAgainstSchema(const char *schemafile,
     }
 
     ret = 0;
+ cleanup:
+    virBufferFreeAndReset(&validator->buf);
+    return ret;
+}
+
+
+int
+virXMLValidateAgainstSchema(const char *schemafile,
+                            xmlDocPtr doc)
+{
+    virXMLValidatorPtr validator = NULL;
+    int ret = -1;
 
+    if (!(validator = virXMLValidatorInit(schemafile)))
+        return -1;
+
+    if (virXMLValidatorValidate(validator, doc) < 0)
+        goto cleanup;
+
+    ret = 0;
  cleanup:
     virXMLValidatorFree(validator);
     return ret;
diff --git a/src/util/virxml.h b/src/util/virxml.h
index 6d4c991..20bad54 100644
--- a/src/util/virxml.h
+++ b/src/util/virxml.h
@@ -191,6 +191,10 @@ virXMLValidatorPtr
 virXMLValidatorInit(const char *schemafile);
 
 int
+virXMLValidatorValidate(virXMLValidatorPtr validator,
+                        xmlDocPtr doc);
+
+int
 virXMLValidateAgainstSchema(const char *schemafile,
                             xmlDocPtr xml);
 void
-- 
2.7.3




More information about the libvir-list mailing list