From: Peter Stamfest Date: Wed, 19 Feb 2014 21:34:20 +0000 (+0100) Subject: suppress error message from libxml when reading XML from stdin. X-Git-Tag: v1.4.9~21^2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e92fe1e675fa996ed67d9abee17e822e5ed2bbf;p=thirdparty%2Frrdtool-1.x.git suppress error message from libxml when reading XML from stdin. This avoids breakage of the pipe protocol in case of errors. --- 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,