xmllint: Add macro for error stream

Prepare for fuzzing.
diff --git a/xmllint.c b/xmllint.c
index d740b76..d2a3398 100644
--- a/xmllint.c
+++ b/xmllint.c
@@ -81,6 +81,8 @@
 #include <libxml/xmlsave.h>
 #endif
 
+#define ERR_STREAM stderr
+
 #ifndef XML_XML_DEFAULT_CATALOG
 #define XML_XML_DEFAULT_CATALOG "file://" SYSCONFDIR "/xml/catalog"
 #endif
@@ -221,7 +223,7 @@
 	return;
     while (*path != 0) {
 	if (nbpaths >= MAX_PATHS) {
-	    fprintf(stderr, "MAX_PATHS reached: too many paths\n");
+	    fprintf(ERR_STREAM, "MAX_PATHS reached: too many paths\n");
 	    return;
 	}
 	cur = path;
@@ -276,7 +278,7 @@
 		ctxt->sax->error = err;
 	    if (load_trace) {
 		fprintf \
-			(stderr,
+			(ERR_STREAM,
 			 "Loaded URL=\"%s\" ID=\"%s\"\n",
 			 URL ? URL : "(null)",
 			 ID ? ID : "(null)");
@@ -299,7 +301,7 @@
 		    ctxt->sax->error = err;
 		if (load_trace) {
 		    fprintf \
-			(stderr,
+			(ERR_STREAM,
 			 "Loaded URL=\"%s\" ID=\"%s\"\n",
 			 newURL,
 			 ID ? ID : "(null)");
@@ -330,7 +332,7 @@
 static void
 OOM(void)
 {
-    fprintf(stderr, "Ran out of memory needs > %d bytes\n", maxmem);
+    fprintf(ERR_STREAM, "Ran out of memory needs > %d bytes\n", maxmem);
     progresult = XMLLINT_ERR_MEM;
 }
 
@@ -442,10 +444,10 @@
     msec += (end.tv_usec - begin.tv_usec) / 1000;
 
     va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
+    vfprintf(ERR_STREAM, fmt, ap);
     va_end(ap);
 
-    fprintf(stderr, " took %ld ms\n", msec);
+    fprintf(ERR_STREAM, " took %ld ms\n", msec);
 }
 #else
 /*
@@ -473,9 +475,9 @@
     msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
 
     va_start(ap, fmt);
-    vfprintf(stderr, fmt, ap);
+    vfprintf(ERR_STREAM, fmt, ap);
     va_end(ap);
-    fprintf(stderr, " took %ld ms\n", msec);
+    fprintf(ERR_STREAM, " took %ld ms\n", msec);
 }
 #endif
 /************************************************************************
@@ -497,7 +499,7 @@
     memset(&buffer[sizeof(buffer)-4], 0, 4);
     result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer);
     if (result) {
-	fprintf(stderr, "%s", result);
+	fprintf(ERR_STREAM, "%s", result);
 	xmlFree(result);
     }
     buffer[0] = 0;
@@ -513,7 +515,7 @@
 static void
 xmlHTMLPrintFileInfo(xmlParserInputPtr input) {
     int len;
-    fprintf(stderr, "<p>");
+    fprintf(ERR_STREAM, "<p>");
 
     len = strlen(buffer);
     if (input != NULL) {
@@ -541,7 +543,7 @@
     int n;
 
     if (input == NULL) return;
-    fprintf(stderr, "<pre>\n");
+    fprintf(ERR_STREAM, "<pre>\n");
     cur = input->cur;
     base = input->base;
     while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
@@ -573,7 +575,7 @@
     len = strlen(buffer);
     snprintf(&buffer[len], sizeof(buffer) - len, "^\n");
     xmlHTMLEncodeSend();
-    fprintf(stderr, "</pre>");
+    fprintf(ERR_STREAM, "</pre>");
 }
 
 /**
@@ -601,13 +603,13 @@
 
     xmlHTMLPrintFileInfo(input);
 
-    fprintf(stderr, "<b>error</b>: ");
+    fprintf(ERR_STREAM, "<b>error</b>: ");
     va_start(args, msg);
     len = strlen(buffer);
     vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);
     va_end(args);
     xmlHTMLEncodeSend();
-    fprintf(stderr, "</p>\n");
+    fprintf(ERR_STREAM, "</p>\n");
 
     xmlHTMLPrintFileContext(input);
     xmlHTMLEncodeSend();
@@ -639,13 +641,13 @@
 
     xmlHTMLPrintFileInfo(input);
 
-    fprintf(stderr, "<b>warning</b>: ");
+    fprintf(ERR_STREAM, "<b>warning</b>: ");
     va_start(args, msg);
     len = strlen(buffer);
     vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);
     va_end(args);
     xmlHTMLEncodeSend();
-    fprintf(stderr, "</p>\n");
+    fprintf(ERR_STREAM, "</p>\n");
 
     xmlHTMLPrintFileContext(input);
     xmlHTMLEncodeSend();
@@ -675,13 +677,13 @@
 
     xmlHTMLPrintFileInfo(input);
 
-    fprintf(stderr, "<b>validity error</b>: ");
+    fprintf(ERR_STREAM, "<b>validity error</b>: ");
     len = strlen(buffer);
     va_start(args, msg);
     vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);
     va_end(args);
     xmlHTMLEncodeSend();
-    fprintf(stderr, "</p>\n");
+    fprintf(ERR_STREAM, "</p>\n");
 
     xmlHTMLPrintFileContext(input);
     xmlHTMLEncodeSend();
@@ -712,13 +714,13 @@
 
     xmlHTMLPrintFileInfo(input);
 
-    fprintf(stderr, "<b>validity warning</b>: ");
+    fprintf(ERR_STREAM, "<b>validity warning</b>: ");
     va_start(args, msg);
     len = strlen(buffer);
     vsnprintf(&buffer[len],  sizeof(buffer) - len, msg, args);
     va_end(args);
     xmlHTMLEncodeSend();
-    fprintf(stderr, "</p>\n");
+    fprintf(ERR_STREAM, "</p>\n");
 
     xmlHTMLPrintFileContext(input);
     xmlHTMLEncodeSend();
@@ -1629,13 +1631,13 @@
 	if (repeat == 0) {
 	    if (ret == 0) {
 	        if (!quiet) {
-	            fprintf(stderr, "%s validates\n", filename);
+	            fprintf(ERR_STREAM, "%s validates\n", filename);
 	        }
 	    } else if (ret > 0) {
-		fprintf(stderr, "%s fails to validate\n", filename);
+		fprintf(ERR_STREAM, "%s fails to validate\n", filename);
 		progresult = XMLLINT_ERR_VALID;
 	    } else {
-		fprintf(stderr, "%s validation generated an internal error\n",
+		fprintf(ERR_STREAM, "%s validation generated an internal error\n",
 		       filename);
 		progresult = XMLLINT_ERR_VALID;
 	    }
@@ -1663,7 +1665,7 @@
             xmlCtxtReadFile(ctxt, filename, NULL, options);
 
 	if (ctxt->myDoc != NULL) {
-	    fprintf(stderr, "SAX generated a doc !\n");
+	    fprintf(ERR_STREAM, "SAX generated a doc !\n");
 	    xmlFreeDoc(ctxt->myDoc);
 	    ctxt->myDoc = NULL;
 	}
@@ -1731,7 +1733,7 @@
 		                    xmlTextReaderConstLocalName(reader),
 				    xmlTextReaderConstNamespaceUri(reader));
 		if (ret < 0) {
-		    fprintf(stderr, "xmlStreamPush() failure\n");
+		    fprintf(ERR_STREAM, "xmlStreamPush() failure\n");
                     xmlFreeStreamCtxt(patstream);
 		    patstream = NULL;
 		} else if (ret != match) {
@@ -1741,13 +1743,13 @@
 		                       xmlTextReaderCurrentNode(reader));
 		    }
 #endif
-		    fprintf(stderr,
+		    fprintf(ERR_STREAM,
 		            "xmlPatternMatch and xmlStreamPush disagree\n");
                     if (path != NULL)
-                        fprintf(stderr, "  pattern %s node %s\n",
+                        fprintf(ERR_STREAM, "  pattern %s node %s\n",
                                 pattern, path);
                     else
-		        fprintf(stderr, "  pattern %s node %s\n",
+		        fprintf(ERR_STREAM, "  pattern %s node %s\n",
 			    pattern, xmlTextReaderConstName(reader));
 		}
 
@@ -1756,7 +1758,7 @@
 	        ((type == XML_READER_TYPE_ELEMENT) && (empty))) {
 	        ret = xmlStreamPop(patstream);
 		if (ret < 0) {
-		    fprintf(stderr, "xmlStreamPop() failure\n");
+		    fprintf(ERR_STREAM, "xmlStreamPop() failure\n");
                     xmlFreeStreamCtxt(patstream);
 		    patstream = NULL;
 		}
@@ -1784,7 +1786,7 @@
 	base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
 	if (base == (void *) MAP_FAILED) {
 	    close(fd);
-	    fprintf(stderr, "mmap failure for file %s\n", filename);
+	    fprintf(ERR_STREAM, "mmap failure for file %s\n", filename);
 	    progresult = XMLLINT_ERR_RDFILE;
 	    return;
 	}
@@ -1803,7 +1805,7 @@
 	if (patstream != NULL) {
 	    ret = xmlStreamPush(patstream, NULL, NULL);
 	    if (ret < 0) {
-		fprintf(stderr, "xmlStreamPush() failure\n");
+		fprintf(ERR_STREAM, "xmlStreamPush() failure\n");
 		xmlFreeStreamCtxt(patstream);
 		patstream = NULL;
             }
@@ -1829,7 +1831,7 @@
 	    }
 	    ret = xmlTextReaderRelaxNGValidate(reader, relaxng);
 	    if (ret < 0) {
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"Relax-NG schema %s failed to compile\n", relaxng);
 		progresult = XMLLINT_ERR_SCHEMACOMP;
 		relaxng = NULL;
@@ -1844,7 +1846,7 @@
 	    }
 	    ret = xmlTextReaderSchemaValidate(reader, schema);
 	    if (ret < 0) {
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"XSD schema %s failed to compile\n", schema);
 		progresult = XMLLINT_ERR_SCHEMACOMP;
 		schema = NULL;
@@ -1888,7 +1890,7 @@
 #ifdef LIBXML_VALID_ENABLED
 	if (valid) {
 	    if (xmlTextReaderIsValid(reader) != 1) {
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"Document %s does not validate\n", filename);
 		progresult = XMLLINT_ERR_VALID;
 	    }
@@ -1897,11 +1899,11 @@
 #ifdef LIBXML_SCHEMAS_ENABLED
 	if ((relaxng != NULL) || (schema != NULL)) {
 	    if (xmlTextReaderIsValid(reader) != 1) {
-		fprintf(stderr, "%s fails to validate\n", filename);
+		fprintf(ERR_STREAM, "%s fails to validate\n", filename);
 		progresult = XMLLINT_ERR_VALID;
 	    } else {
 	        if (!quiet) {
-	            fprintf(stderr, "%s validates\n", filename);
+	            fprintf(ERR_STREAM, "%s validates\n", filename);
 	        }
 	    }
 	}
@@ -1911,11 +1913,11 @@
 	 */
 	xmlFreeTextReader(reader);
 	if (ret != 0) {
-	    fprintf(stderr, "%s : failed to parse\n", filename);
+	    fprintf(ERR_STREAM, "%s : failed to parse\n", filename);
 	    progresult = XMLLINT_ERR_UNCLASS;
 	}
     } else {
-	fprintf(stderr, "Unable to open %s\n", filename);
+	fprintf(ERR_STREAM, "Unable to open %s\n", filename);
 	progresult = XMLLINT_ERR_UNCLASS;
     }
 #ifdef LIBXML_PATTERN_ENABLED
@@ -1944,7 +1946,7 @@
 
     root = xmlDocGetRootElement(doc);
     if (root == NULL ) {
-        fprintf(stderr,
+        fprintf(ERR_STREAM,
                 "Document does not have a root element");
         progresult = XMLLINT_ERR_UNCLASS;
         return;
@@ -1960,7 +1962,7 @@
         patternc = xmlPatterncompile((const xmlChar *) pattern, doc->dict,
 	                             0, &namespaces[0]);
 	if (patternc == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Pattern %s failed to compile\n", pattern);
             progresult = XMLLINT_ERR_SCHEMAPAT;
 	    pattern = NULL;
@@ -1971,7 +1973,7 @@
 	if (patstream != NULL) {
 	    ret = xmlStreamPush(patstream, NULL, NULL);
 	    if (ret < 0) {
-		fprintf(stderr, "xmlStreamPush() failure\n");
+		fprintf(ERR_STREAM, "xmlStreamPush() failure\n");
 		xmlFreeStreamCtxt(patstream);
 		patstream = NULL;
             }
@@ -1998,11 +2000,11 @@
 	}
 	xmlFreeTextReader(reader);
 	if (ret != 0) {
-	    fprintf(stderr, "failed to walk through the doc\n");
+	    fprintf(ERR_STREAM, "failed to walk through the doc\n");
 	    progresult = XMLLINT_ERR_UNCLASS;
 	}
     } else {
-	fprintf(stderr, "Failed to crate a reader from the document\n");
+	fprintf(ERR_STREAM, "Failed to crate a reader from the document\n");
 	progresult = XMLLINT_ERR_UNCLASS;
     }
 #ifdef LIBXML_PATTERN_ENABLED
@@ -2032,13 +2034,13 @@
             if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr <= 0)) {
                 progresult = XMLLINT_ERR_XPATH_EMPTY;
                 if (!quiet) {
-                    fprintf(stderr, "XPath set is empty\n");
+                    fprintf(ERR_STREAM, "XPath set is empty\n");
                 }
                 break;
             }
             buf = xmlOutputBufferCreateFile(stdout, NULL);
             if (buf == NULL) {
-                fprintf(stderr, "Out of memory for XPath\n");
+                fprintf(ERR_STREAM, "Out of memory for XPath\n");
                 progresult = XMLLINT_ERR_MEM;
                 return;
             }
@@ -2077,11 +2079,11 @@
 	    printf("%s\n", (const char *) cur->stringval);
 	    break;
         case XPATH_UNDEFINED:
-	    fprintf(stderr, "XPath Object is uninitialized\n");
+	    fprintf(ERR_STREAM, "XPath Object is uninitialized\n");
             progresult = XMLLINT_ERR_XPATH;
 	    break;
 	default:
-	    fprintf(stderr, "XPath object of unexpected type\n");
+	    fprintf(ERR_STREAM, "XPath object of unexpected type\n");
             progresult = XMLLINT_ERR_XPATH;
 	    break;
     }
@@ -2093,7 +2095,7 @@
 
     ctxt = xmlXPathNewContext(doc);
     if (ctxt == NULL) {
-        fprintf(stderr, "Out of memory for XPath\n");
+        fprintf(ERR_STREAM, "Out of memory for XPath\n");
         progresult = XMLLINT_ERR_MEM;
         return;
     }
@@ -2102,7 +2104,7 @@
     xmlXPathFreeContext(ctxt);
 
     if (res == NULL) {
-        fprintf(stderr, "XPath evaluation failure\n");
+        fprintf(ERR_STREAM, "XPath evaluation failure\n");
         progresult = XMLLINT_ERR_XPATH;
         return;
     }
@@ -2151,7 +2153,7 @@
         } else {
 	    f = fopen(filename, "rb");
             if (f == NULL) {
-                fprintf(stderr, "Can't open %s\n", filename);
+                fprintf(ERR_STREAM, "Can't open %s\n", filename);
                 progresult = XMLLINT_ERR_UNCLASS;
                 return;
             }
@@ -2189,7 +2191,7 @@
 	base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
 	if (base == (void *) MAP_FAILED) {
 	    close(fd);
-	    fprintf(stderr, "mmap failure for file %s\n", filename);
+	    fprintf(ERR_STREAM, "mmap failure for file %s\n", filename);
 	    progresult = XMLLINT_ERR_RDFILE;
 	    return;
 	}
@@ -2226,7 +2228,7 @@
 	    } else {
 		f = fopen(filename, "rb");
                 if (f == NULL) {
-                    fprintf(stderr, "Can't open %s\n", filename);
+                    fprintf(ERR_STREAM, "Can't open %s\n", filename);
                     progresult = XMLLINT_ERR_UNCLASS;
                     return;
                 }
@@ -2315,7 +2317,7 @@
 	    base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
 	    if (base == (void *) MAP_FAILED) {
 	        close(fd);
-	        fprintf(stderr, "mmap failure for file %s\n", filename);
+	        fprintf(ERR_STREAM, "mmap failure for file %s\n", filename);
 		progresult = XMLLINT_ERR_RDFILE;
 	        return;
 	    }
@@ -2325,7 +2327,7 @@
 
                 ctxt = xmlNewParserCtxt();
                 if (ctxt == NULL) {
-                    fprintf(stderr, "out of memory\n");
+                    fprintf(ERR_STREAM, "out of memory\n");
                     progresult = XMLLINT_ERR_MEM;
                     return;
                 }
@@ -2381,7 +2383,7 @@
 
                 ctxt = xmlNewParserCtxt();
                 if (ctxt == NULL) {
-                    fprintf(stderr, "out of memory\n");
+                    fprintf(ERR_STREAM, "out of memory\n");
                     progresult = XMLLINT_ERR_MEM;
                     return;
                 }
@@ -2499,14 +2501,14 @@
 	    if (node != NULL) {
 		nb = xmlValidGetValidElements(node->last, NULL, list, 256);
 		if (nb < 0) {
-		    fprintf(stderr, "could not get valid list of elements\n");
+		    fprintf(ERR_STREAM, "could not get valid list of elements\n");
 		} else if (nb == 0) {
-		    fprintf(stderr, "No element can be inserted under root\n");
+		    fprintf(ERR_STREAM, "No element can be inserted under root\n");
 		} else {
-		    fprintf(stderr, "%d element types can be inserted under root:\n",
+		    fprintf(ERR_STREAM, "%d element types can be inserted under root:\n",
 		           nb);
 		    for (i = 0;i < nb;i++) {
-			 fprintf(stderr, "%s\n", (char *) list[i]);
+			 fprintf(ERR_STREAM, "%s\n", (char *) list[i]);
 		    }
 		}
 	    }
@@ -2564,7 +2566,7 @@
 			if (output != NULL)
 			    fclose(out);
 		    } else {
-			fprintf(stderr, "failed to open %s\n", output);
+			fprintf(ERR_STREAM, "failed to open %s\n", output);
 			progresult = XMLLINT_ERR_OUT;
 		    }
 		}
@@ -2581,11 +2583,11 @@
 		size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_0, NULL, 1, &result);
 		if (size >= 0) {
 		    if (write(1, result, size) == -1) {
-		        fprintf(stderr, "Can't write data\n");
+		        fprintf(ERR_STREAM, "Can't write data\n");
 		    }
 		    xmlFree(result);
 		} else {
-		    fprintf(stderr, "Failed to canonicalize\n");
+		    fprintf(ERR_STREAM, "Failed to canonicalize\n");
 		    progresult = XMLLINT_ERR_OUT;
 		}
 	    } else if (canonical_11) {
@@ -2595,11 +2597,11 @@
 		size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_1, NULL, 1, &result);
 		if (size >= 0) {
 		    if (write(1, result, size) == -1) {
-		        fprintf(stderr, "Can't write data\n");
+		        fprintf(ERR_STREAM, "Can't write data\n");
 		    }
 		    xmlFree(result);
 		} else {
-		    fprintf(stderr, "Failed to canonicalize\n");
+		    fprintf(ERR_STREAM, "Failed to canonicalize\n");
 		    progresult = XMLLINT_ERR_OUT;
 		}
 	    } else
@@ -2610,11 +2612,11 @@
 		size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_EXCLUSIVE_1_0, NULL, 1, &result);
 		if (size >= 0) {
 		    if (write(1, result, size) == -1) {
-		        fprintf(stderr, "Can't write data\n");
+		        fprintf(ERR_STREAM, "Can't write data\n");
 		    }
 		    xmlFree(result);
 		} else {
-		    fprintf(stderr, "Failed to canonicalize\n");
+		    fprintf(ERR_STREAM, "Failed to canonicalize\n");
 		    progresult = XMLLINT_ERR_OUT;
 		}
 	    } else
@@ -2637,11 +2639,11 @@
 			xmlDocDumpMemory(doc, &result, &len);
 		}
 		if (result == NULL) {
-		    fprintf(stderr, "Failed to save\n");
+		    fprintf(ERR_STREAM, "Failed to save\n");
 		    progresult = XMLLINT_ERR_OUT;
 		} else {
 		    if (write(1, result, len) == -1) {
-		        fprintf(stderr, "Can't write data\n");
+		        fprintf(ERR_STREAM, "Can't write data\n");
 		    }
 		    xmlFree(result);
 		}
@@ -2661,14 +2663,14 @@
 			                     encoding);
 		    }
 		    if (ret < 0) {
-			fprintf(stderr, "failed save to %s\n",
+			fprintf(ERR_STREAM, "failed save to %s\n",
 				output ? output : "-");
 			progresult = XMLLINT_ERR_OUT;
 		    }
 		} else if (format == 1) {
 		    ret = xmlSaveFormatFile(output ? output : "-", doc, 1);
 		    if (ret < 0) {
-			fprintf(stderr, "failed save to %s\n",
+			fprintf(ERR_STREAM, "failed save to %s\n",
 				output ? output : "-");
 			progresult = XMLLINT_ERR_OUT;
 		    }
@@ -2686,7 +2688,7 @@
 			if (output != NULL)
 			    fclose(out);
 		    } else {
-			fprintf(stderr, "failed to open %s\n", output);
+			fprintf(ERR_STREAM, "failed to open %s\n", output);
 			progresult = XMLLINT_ERR_OUT;
 		    }
 		}
@@ -2711,7 +2713,7 @@
 
 		if (ctxt != NULL) {
 		    if (xmlSaveDoc(ctxt, doc) < 0) {
-			fprintf(stderr, "failed save to %s\n",
+			fprintf(ERR_STREAM, "failed save to %s\n",
 				output ? output : "-");
 			progresult = XMLLINT_ERR_OUT;
 		    }
@@ -2737,7 +2739,7 @@
 		if (output != NULL)
 		    fclose(out);
 	    } else {
-		fprintf(stderr, "failed to open %s\n", output);
+		fprintf(ERR_STREAM, "failed to open %s\n", output);
 		progresult = XMLLINT_ERR_OUT;
 	    }
 	}
@@ -2764,17 +2766,17 @@
 	}
 	if (dtd == NULL) {
 	    if (dtdvalid != NULL)
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"Could not parse DTD %s\n", dtdvalid);
 	    else
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"Could not parse DTD %s\n", dtdvalidfpi);
 	    progresult = XMLLINT_ERR_DTD;
 	} else {
 	    xmlValidCtxtPtr cvp;
 
 	    if ((cvp = xmlNewValidCtxt()) == NULL) {
-		fprintf(stderr,
+		fprintf(ERR_STREAM,
 			"Couldn't allocate validation context\n");
                 progresult = XMLLINT_ERR_MEM;
                 xmlFreeDtd(dtd);
@@ -2786,11 +2788,11 @@
 	    }
 	    if (!xmlValidateDtd(cvp, doc, dtd)) {
 		if (dtdvalid != NULL)
-		    fprintf(stderr,
+		    fprintf(ERR_STREAM,
 			    "Document %s does not validate against %s\n",
 			    filename, dtdvalid);
 		else
-		    fprintf(stderr,
+		    fprintf(ERR_STREAM,
 			    "Document %s does not validate against %s\n",
 			    filename, dtdvalidfpi);
 		progresult = XMLLINT_ERR_VALID;
@@ -2805,7 +2807,7 @@
 	xmlValidCtxtPtr cvp;
 
 	if ((cvp = xmlNewValidCtxt()) == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Couldn't allocate validation context\n");
             progresult = XMLLINT_ERR_MEM;
             xmlFreeDoc(doc);
@@ -2816,7 +2818,7 @@
 	    startTimer();
 	}
 	if (!xmlValidateDocument(cvp, doc)) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Document %s does not validate\n", filename);
 	    progresult = XMLLINT_ERR_VALID;
 	}
@@ -2851,13 +2853,13 @@
 	ret = xmlSchematronValidateDoc(ctxt, doc);
 	if (ret == 0) {
 	    if (!quiet) {
-	        fprintf(stderr, "%s validates\n", filename);
+	        fprintf(ERR_STREAM, "%s validates\n", filename);
 	    }
 	} else if (ret > 0) {
-	    fprintf(stderr, "%s fails to validate\n", filename);
+	    fprintf(ERR_STREAM, "%s fails to validate\n", filename);
 	    progresult = XMLLINT_ERR_VALID;
 	} else {
-	    fprintf(stderr, "%s validation generated an internal error\n",
+	    fprintf(ERR_STREAM, "%s validation generated an internal error\n",
 		   filename);
 	    progresult = XMLLINT_ERR_VALID;
 	}
@@ -2885,13 +2887,13 @@
 	ret = xmlRelaxNGValidateDoc(ctxt, doc);
 	if (ret == 0) {
 	    if (!quiet) {
-	        fprintf(stderr, "%s validates\n", filename);
+	        fprintf(ERR_STREAM, "%s validates\n", filename);
 	    }
 	} else if (ret > 0) {
-	    fprintf(stderr, "%s fails to validate\n", filename);
+	    fprintf(ERR_STREAM, "%s fails to validate\n", filename);
 	    progresult = XMLLINT_ERR_VALID;
 	} else {
-	    fprintf(stderr, "%s validation generated an internal error\n",
+	    fprintf(ERR_STREAM, "%s validation generated an internal error\n",
 		   filename);
 	    progresult = XMLLINT_ERR_VALID;
 	}
@@ -2916,13 +2918,13 @@
 	ret = xmlSchemaValidateDoc(ctxt, doc);
 	if (ret == 0) {
 	    if (!quiet) {
-	        fprintf(stderr, "%s validates\n", filename);
+	        fprintf(ERR_STREAM, "%s validates\n", filename);
 	    }
 	} else if (ret > 0) {
-	    fprintf(stderr, "%s fails to validate\n", filename);
+	    fprintf(ERR_STREAM, "%s fails to validate\n", filename);
 	    progresult = XMLLINT_ERR_VALID;
 	} else {
-	    fprintf(stderr, "%s validation generated an internal error\n",
+	    fprintf(ERR_STREAM, "%s validation generated an internal error\n",
 		   filename);
 	    progresult = XMLLINT_ERR_VALID;
 	}
@@ -2936,7 +2938,7 @@
 #ifdef LIBXML_DEBUG_ENABLED
 #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
     if ((debugent) && (!html))
-	xmlDebugDumpEntities(stderr, doc);
+	xmlDebugDumpEntities(ERR_STREAM, doc);
 #endif
 #endif
 
@@ -2959,40 +2961,40 @@
  ************************************************************************/
 
 static void showVersion(const char *name) {
-    fprintf(stderr, "%s: using libxml version %s\n", name, xmlParserVersion);
-    fprintf(stderr, "   compiled with: ");
-    if (xmlHasFeature(XML_WITH_THREAD)) fprintf(stderr, "Threads ");
-    if (xmlHasFeature(XML_WITH_TREE)) fprintf(stderr, "Tree ");
-    if (xmlHasFeature(XML_WITH_OUTPUT)) fprintf(stderr, "Output ");
-    if (xmlHasFeature(XML_WITH_PUSH)) fprintf(stderr, "Push ");
-    if (xmlHasFeature(XML_WITH_READER)) fprintf(stderr, "Reader ");
-    if (xmlHasFeature(XML_WITH_PATTERN)) fprintf(stderr, "Patterns ");
-    if (xmlHasFeature(XML_WITH_WRITER)) fprintf(stderr, "Writer ");
-    if (xmlHasFeature(XML_WITH_SAX1)) fprintf(stderr, "SAXv1 ");
-    if (xmlHasFeature(XML_WITH_FTP)) fprintf(stderr, "FTP ");
-    if (xmlHasFeature(XML_WITH_HTTP)) fprintf(stderr, "HTTP ");
-    if (xmlHasFeature(XML_WITH_VALID)) fprintf(stderr, "DTDValid ");
-    if (xmlHasFeature(XML_WITH_HTML)) fprintf(stderr, "HTML ");
-    if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(stderr, "Legacy ");
-    if (xmlHasFeature(XML_WITH_C14N)) fprintf(stderr, "C14N ");
-    if (xmlHasFeature(XML_WITH_CATALOG)) fprintf(stderr, "Catalog ");
-    if (xmlHasFeature(XML_WITH_XPATH)) fprintf(stderr, "XPath ");
-    if (xmlHasFeature(XML_WITH_XPTR)) fprintf(stderr, "XPointer ");
-    if (xmlHasFeature(XML_WITH_XINCLUDE)) fprintf(stderr, "XInclude ");
-    if (xmlHasFeature(XML_WITH_ICONV)) fprintf(stderr, "Iconv ");
-    if (xmlHasFeature(XML_WITH_ICU)) fprintf(stderr, "ICU ");
-    if (xmlHasFeature(XML_WITH_ISO8859X)) fprintf(stderr, "ISO8859X ");
-    if (xmlHasFeature(XML_WITH_UNICODE)) fprintf(stderr, "Unicode ");
-    if (xmlHasFeature(XML_WITH_REGEXP)) fprintf(stderr, "Regexps ");
-    if (xmlHasFeature(XML_WITH_AUTOMATA)) fprintf(stderr, "Automata ");
-    if (xmlHasFeature(XML_WITH_EXPR)) fprintf(stderr, "Expr ");
-    if (xmlHasFeature(XML_WITH_SCHEMAS)) fprintf(stderr, "Schemas ");
-    if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(stderr, "Schematron ");
-    if (xmlHasFeature(XML_WITH_MODULES)) fprintf(stderr, "Modules ");
-    if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(stderr, "Debug ");
-    if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib ");
-    if (xmlHasFeature(XML_WITH_LZMA)) fprintf(stderr, "Lzma ");
-    fprintf(stderr, "\n");
+    fprintf(ERR_STREAM, "%s: using libxml version %s\n", name, xmlParserVersion);
+    fprintf(ERR_STREAM, "   compiled with: ");
+    if (xmlHasFeature(XML_WITH_THREAD)) fprintf(ERR_STREAM, "Threads ");
+    if (xmlHasFeature(XML_WITH_TREE)) fprintf(ERR_STREAM, "Tree ");
+    if (xmlHasFeature(XML_WITH_OUTPUT)) fprintf(ERR_STREAM, "Output ");
+    if (xmlHasFeature(XML_WITH_PUSH)) fprintf(ERR_STREAM, "Push ");
+    if (xmlHasFeature(XML_WITH_READER)) fprintf(ERR_STREAM, "Reader ");
+    if (xmlHasFeature(XML_WITH_PATTERN)) fprintf(ERR_STREAM, "Patterns ");
+    if (xmlHasFeature(XML_WITH_WRITER)) fprintf(ERR_STREAM, "Writer ");
+    if (xmlHasFeature(XML_WITH_SAX1)) fprintf(ERR_STREAM, "SAXv1 ");
+    if (xmlHasFeature(XML_WITH_FTP)) fprintf(ERR_STREAM, "FTP ");
+    if (xmlHasFeature(XML_WITH_HTTP)) fprintf(ERR_STREAM, "HTTP ");
+    if (xmlHasFeature(XML_WITH_VALID)) fprintf(ERR_STREAM, "DTDValid ");
+    if (xmlHasFeature(XML_WITH_HTML)) fprintf(ERR_STREAM, "HTML ");
+    if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(ERR_STREAM, "Legacy ");
+    if (xmlHasFeature(XML_WITH_C14N)) fprintf(ERR_STREAM, "C14N ");
+    if (xmlHasFeature(XML_WITH_CATALOG)) fprintf(ERR_STREAM, "Catalog ");
+    if (xmlHasFeature(XML_WITH_XPATH)) fprintf(ERR_STREAM, "XPath ");
+    if (xmlHasFeature(XML_WITH_XPTR)) fprintf(ERR_STREAM, "XPointer ");
+    if (xmlHasFeature(XML_WITH_XINCLUDE)) fprintf(ERR_STREAM, "XInclude ");
+    if (xmlHasFeature(XML_WITH_ICONV)) fprintf(ERR_STREAM, "Iconv ");
+    if (xmlHasFeature(XML_WITH_ICU)) fprintf(ERR_STREAM, "ICU ");
+    if (xmlHasFeature(XML_WITH_ISO8859X)) fprintf(ERR_STREAM, "ISO8859X ");
+    if (xmlHasFeature(XML_WITH_UNICODE)) fprintf(ERR_STREAM, "Unicode ");
+    if (xmlHasFeature(XML_WITH_REGEXP)) fprintf(ERR_STREAM, "Regexps ");
+    if (xmlHasFeature(XML_WITH_AUTOMATA)) fprintf(ERR_STREAM, "Automata ");
+    if (xmlHasFeature(XML_WITH_EXPR)) fprintf(ERR_STREAM, "Expr ");
+    if (xmlHasFeature(XML_WITH_SCHEMAS)) fprintf(ERR_STREAM, "Schemas ");
+    if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(ERR_STREAM, "Schematron ");
+    if (xmlHasFeature(XML_WITH_MODULES)) fprintf(ERR_STREAM, "Modules ");
+    if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(ERR_STREAM, "Debug ");
+    if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(ERR_STREAM, "Zlib ");
+    if (xmlHasFeature(XML_WITH_LZMA)) fprintf(ERR_STREAM, "Lzma ");
+    fprintf(ERR_STREAM, "\n");
 }
 
 static void usage(FILE *f, const char *name) {
@@ -3124,11 +3126,11 @@
     errno = 0;
     val = strtoul(str, &strEnd, 10);
     if (errno == EINVAL || *strEnd != 0) {
-        fprintf(stderr, "%s: invalid integer: %s\n", ctxt, str);
+        fprintf(ERR_STREAM, "%s: invalid integer: %s\n", ctxt, str);
         exit(XMLLINT_ERR_UNCLASS);
     }
     if (errno != 0 || val < min || val > max) {
-        fprintf(stderr, "%s: integer out of range: %s\n", ctxt, str);
+        fprintf(ERR_STREAM, "%s: integer out of range: %s\n", ctxt, str);
         exit(XMLLINT_ERR_UNCLASS);
     }
 
@@ -3142,7 +3144,7 @@
     int version = 0;
 
     if (argc <= 1) {
-	usage(stderr, argv[0]);
+	usage(ERR_STREAM, argv[0]);
 	return(XMLLINT_ERR_UNCLASS);
     }
 
@@ -3155,7 +3157,7 @@
 	    (!strcmp(argv[i], "--maxmem"))) {
             i++;
             if (i >= argc) {
-                fprintf(stderr, "maxmem: missing integer value\n");
+                fprintf(ERR_STREAM, "maxmem: missing integer value\n");
                 return(XMLLINT_ERR_UNCLASS);
             }
             errno = 0;
@@ -3493,13 +3495,13 @@
 	           (!strcmp(argv[i], "--max-ampl"))) {
             i++;
             if (i >= argc) {
-                fprintf(stderr, "max-ampl: missing integer value\n");
+                fprintf(ERR_STREAM, "max-ampl: missing integer value\n");
                 return(XMLLINT_ERR_UNCLASS);
             }
             maxAmpl = parseInteger("max-ampl", argv[i], 1, UINT_MAX);
 	} else {
-	    fprintf(stderr, "Unknown option %s\n", argv[i]);
-	    usage(stderr, argv[0]);
+	    fprintf(ERR_STREAM, "Unknown option %s\n", argv[i]);
+	    usage(ERR_STREAM, argv[0]);
 	    return(XMLLINT_ERR_UNCLASS);
 	}
     }
@@ -3513,7 +3515,7 @@
 	    if (catal != NULL) {
 		xmlLoadCatalogs(catal);
 	    } else {
-		fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n");
+		fprintf(ERR_STREAM, "Variable $SGML_CATALOG_FILES not set\n");
 	    }
 	}
     }
@@ -3536,14 +3538,14 @@
     if ((noblanks != 0) || (format == 1))
         options |= XML_PARSE_NOBLANKS;
     if ((htmlout) && (!nowrap)) {
-	fprintf(stderr,
+	fprintf(ERR_STREAM,
          "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n");
-	fprintf(stderr,
+	fprintf(ERR_STREAM,
 		"\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n");
-	fprintf(stderr,
+	fprintf(ERR_STREAM,
 	 "<html><head><title>%s output</title></head>\n",
 		argv[0]);
-	fprintf(stderr,
+	fprintf(ERR_STREAM,
 	 "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n",
 		argv[0]);
     }
@@ -3568,7 +3570,7 @@
         }
 	wxschematron = xmlSchematronParse(ctxt);
 	if (wxschematron == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Schematron schema %s failed to compile\n", schematron);
             progresult = XMLLINT_ERR_SCHEMACOMP;
 	    schematron = NULL;
@@ -3599,7 +3601,7 @@
         }
 	relaxngschemas = xmlRelaxNGParse(ctxt);
 	if (relaxngschemas == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Relax-NG schema %s failed to compile\n", relaxng);
             progresult = XMLLINT_ERR_SCHEMACOMP;
 	    relaxng = NULL;
@@ -3625,7 +3627,7 @@
         }
 	wxschemas = xmlSchemaParse(ctxt);
 	if (wxschemas == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "WXS schema %s failed to compile\n", schema);
             progresult = XMLLINT_ERR_SCHEMACOMP;
 	    schema = NULL;
@@ -3640,7 +3642,7 @@
     if ((pattern != NULL) && (walker == 0)) {
         patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
 	if (patternc == NULL) {
-	    fprintf(stderr,
+	    fprintf(ERR_STREAM,
 		    "Pattern %s failed to compile\n", pattern);
             progresult = XMLLINT_ERR_SCHEMAPAT;
 	    pattern = NULL;
@@ -3772,10 +3774,10 @@
     if (generate)
 	parseAndPrintFile(NULL, NULL);
     if ((htmlout) && (!nowrap)) {
-	fprintf(stderr, "</body></html>\n");
+	fprintf(ERR_STREAM, "</body></html>\n");
     }
     if ((files == 0) && (!generate) && (version == 0)) {
-	usage(stderr, argv[0]);
+	usage(ERR_STREAM, argv[0]);
         progresult = XMLLINT_ERR_UNCLASS;
     }
 #ifdef LIBXML_SCHEMATRON_ENABLED