From 4702687cfbb965738e005083308f094023f11673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 7 Jun 2016 18:58:02 +0200 Subject: [PATCH] Introduce virXMLValidatorValidate 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 e631c14671..4d56d1f0af 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 19163dbb46..aa97940ab7 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 f2df6168e6..7a89518b9a 100644 --- a/src/util/virxml.h +++ b/src/util/virxml.h @@ -192,6 +192,10 @@ typedef virXMLValidator *virXMLValidatorPtr; virXMLValidatorPtr virXMLValidatorInit(const char *schemafile); +int +virXMLValidatorValidate(virXMLValidatorPtr validator, + xmlDocPtr doc); + int virXMLValidateAgainstSchema(const char *schemafile, xmlDocPtr xml);