From 6e92fe1e675fa996ed67d9abee17e822e5ed2bbf Mon Sep 17 00:00:00 2001 From: Peter Stamfest Date: Wed, 19 Feb 2014 22:34:20 +0100 Subject: [PATCH] suppress error message from libxml when reading XML from stdin. This avoids breakage of the pipe protocol in case of errors. --- src/rrd_restore.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/rrd_restore.c b/src/rrd_restore.c index 1f1924f3..53380dbd 100644 --- a/src/rrd_restore.c +++ b/src/rrd_restore.c @@ -1148,6 +1148,17 @@ static int stdioXmlInputCloseCallback(void *context) return 0; /* everything is OK */ } +/* an XML error reporting function that just suppresses all error messages. + This is used when parsing an XML file from stdin. This should help to + not break the pipe interface protocol by suppressing the sending out of + XML error messages. */ +static void ignoringErrorFunc( + void *ctx, + const char * msg, + ...) +{ +} + static rrd_t *parse_file( const char *filename) { @@ -1157,6 +1168,8 @@ static rrd_t *parse_file( rrd_t *rrd; stdioXmlReaderContext *sctx = NULL; + /* special handling for XML on stdin (like it is the case when using + the pipe interface) */ if (strcmp(filename, "-") == 0) { sctx = malloc(sizeof(*sctx)); if (sctx == NULL) { @@ -1168,6 +1181,8 @@ static rrd_t *parse_file( sctx->closed = 0; sctx->eofchar = 0x1A; /* ctrl-Z */ + xmlSetGenericErrorFunc(NULL, ignoringErrorFunc); + reader = xmlReaderForIO(stdioXmlInputReadCallback, stdioXmlInputCloseCallback, sctx, -- 2.47.2