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);