From: pcarana Date: Thu, 30 Jul 2020 18:59:00 +0000 (-0500) Subject: Log (missing) XML reader errors X-Git-Tag: v1.4.0~6 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=cbeeab0d01eb67855c5ca3fac1f2241b4db38270;p=thirdparty%2FFORT-validator.git Log (missing) XML reader errors --- diff --git a/src/xml/relax_ng.c b/src/xml/relax_ng.c index 0d97045b..e917dd65 100644 --- a/src/xml/relax_ng.c +++ b/src/xml/relax_ng.c @@ -1,8 +1,8 @@ #include "relax_ng.h" -#include #include #include +#include #include #include @@ -36,6 +36,17 @@ relax_ng_log_warn(void *ctx, const char *msg, ...) VLOG_MSG(warn) } +static void +relax_ng_log_str_err(void *userData, xmlErrorPtr error) +{ + char *ptr; + + ptr = error->message; + if (ptr[strlen(ptr) - 1] == '\n') + ptr[strlen(ptr) - 1] = '\0'; + pr_val_err("%s (at line %d)", ptr, error->line); +} + /* Initialize global schema to parse RRDP files */ int relax_ng_init(void) @@ -50,15 +61,15 @@ relax_ng_init(void) goto cleanup_parser; } + xmlRelaxNGSetParserErrors(rngparser, relax_ng_log_err, + relax_ng_log_warn, NULL); + schema = xmlRelaxNGParse(rngparser); if (schema == NULL) { error = pr_op_err("XML parser init error: xmlRelaxNGParse() returned NULL"); goto free_parser_ctx; } - xmlRelaxNGSetParserErrors(rngparser, relax_ng_log_err, - relax_ng_log_warn, NULL); - return 0; free_parser_ctx: xmlRelaxNGFreeParserCtxt(rngparser); @@ -104,6 +115,9 @@ relax_ng_parse(const char *path, xml_read_cb cb, void *arg) goto free_valid_ctx; } + xmlTextReaderSetStructuredErrorHandler(reader, relax_ng_log_str_err, + NULL); + while ((read = xmlTextReaderRead(reader)) == 1) { error = cb(reader, arg); if (error)