Setting up the framework for structured error reporting, touches a lot of

* HTMLparser.c c14n.c catalog.c error.c globals.c parser.c
  parserInternals.c relaxng.c valid.c xinclude.c xmlIO.c xmlregexp.c
  xmlschemas.c xpath.c xpointer.c include/libxml/globals.h
  include/libxml/parser.h include/libxml/valid.h
  include/libxml/xmlerror.h: Setting up the framework for structured
  error reporting, touches a lot of modules, but little code now
  the error handling trail has been cleaned up.
Daniel
diff --git a/valid.c b/valid.c
index 34f93df..bec4f9a 100644
--- a/valid.c
+++ b/valid.c
@@ -53,6 +53,7 @@
 static void
 xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -61,14 +62,15 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+        schannel = ctxt->serror;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, XML_ERR_NO_MEMORY,
                         XML_ERR_FATAL, NULL, 0, extra, NULL, NULL, 0, 0,
                         "Memory allocation failed : %s\n", extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, XML_ERR_NO_MEMORY,
                         XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0,
                         "Memory allocation failed\n");
@@ -86,22 +88,24 @@
 xmlErrValid(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlParserErrors error,
             const char *msg, const char *extra)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
 
     if (ctxt != NULL) {
         channel = ctxt->error;
+        schannel = ctxt->serror;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
     }
     if (extra)
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, error,
                         XML_ERR_ERROR, NULL, 0, extra, NULL, NULL, 0, 0,
                         msg, extra);
     else
-        __xmlRaiseError(channel, data,
+        __xmlRaiseError(schannel, channel, data,
                         pctxt, NULL, XML_FROM_DTD, error,
                         XML_ERR_ERROR, NULL, 0, NULL, NULL, NULL, 0, 0,
                         msg);
@@ -124,6 +128,7 @@
                 const char *msg, const xmlChar * str1,
                 int int2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -132,8 +137,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_ERROR, NULL, 0,
                     (const char *) str1,
                     (const char *) str3,
@@ -156,6 +162,7 @@
                 const char *msg, const xmlChar * str1,
                 const xmlChar * str2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -164,8 +171,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_ERROR, NULL, 0,
                     (const char *) str1,
                     (const char *) str1,
@@ -188,6 +196,7 @@
                 const char *msg, const xmlChar * str1,
                 const xmlChar * str2, const xmlChar * str3)
 {
+    xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     xmlParserCtxtPtr pctxt = NULL;
     void *data = NULL;
@@ -196,8 +205,9 @@
         channel = ctxt->error;
         data = ctxt->userData;
 	pctxt = ctxt->userData;
+	pctxt = ctxt->userData;
     }
-    __xmlRaiseError(channel, data, pctxt, node, XML_FROM_DTD, error,
+    __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_DTD, error,
                     XML_ERR_WARNING, NULL, 0,
                     (const char *) str1,
                     (const char *) str1,