changed 'make tests' to use a concise output, scrolling to see where thing

* Makefile.am: changed 'make tests' to use a concise output,
  scrolling to see where thing broke wasn't pleasant
* configure.in: some beta4 preparation, but not ready yet
* error.c globals.c include/libxml/globals.h include/libxml/xmlerror.h:
  new error handling code, last error informations are stored
  in the parsing context or a global variable, new APIs to
  handle the xmlErrorPtr type.
* parser.c parserInternals.c valid.c : started migrating to the
  new error handling code, it's a royal pain.
* include/libxml/parser.h include/libxml/parserInternals.h:
  moved the definition of xmlNewParserCtxt()
* parser.c: small potential buffer access problem in push code
  provided by Justin Fletcher
* result/*.sax result/VC/PENesting* result/namespaces/*
  result/valid/*.err: some error messages were sligthly changed.
Daniel
diff --git a/parser.c b/parser.c
index 0a9151a..7b6c59a 100644
--- a/parser.c
+++ b/parser.c
@@ -143,22 +143,14 @@
         ctxt->instate = XML_PARSER_EOF;
         ctxt->disableSAX = 1;
     }
-    if ((ctxt != NULL) && (ctxt->sax != NULL)
-        && (ctxt->sax->error != NULL)) {
-        if (extra)
-            ctxt->sax->error(ctxt->userData,
-                             "Memory allocation failed : %s\n", extra);
-        else
-            ctxt->sax->error(ctxt->userData,
-                             "Memory allocation failed !\n");
-    } else {
-        if (extra)
-            xmlGenericError(xmlGenericErrorContext,
-                            "Memory allocation failed : %s\n", extra);
-        else
-            xmlGenericError(xmlGenericErrorContext,
-                            "Memory allocation failed !\n");
-    }
+    if (extra)
+        xmlRaiseError(ctxt, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
+                      XML_ERR_FATAL, NULL, 0, extra, NULL, NULL, 0, 0,
+                      "Memory allocation failed : %s\n", extra);
+    else
+        xmlRaiseError(ctxt, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
+                      XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0,
+                      "Memory allocation failed\n");
 }
 
 /**
@@ -174,15 +166,15 @@
                    const xmlChar * localname)
 {
     ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED;
-    if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
-        if (prefix == NULL)
-            ctxt->sax->error(ctxt->userData,
-                             "Attribute %s redefined\n", localname);
-        else
-            ctxt->sax->error(ctxt->userData,
-                             "Attribute %s:%s redefined\n", prefix,
-                             localname);
-    }
+    if (prefix == NULL)
+        xmlRaiseError(ctxt, XML_FROM_PARSER, ctxt->errNo, XML_ERR_FATAL,
+                      NULL, 0, (const char *) localname, NULL, NULL, 0, 0,
+                      "Attribute %s redefined\n", localname);
+    else
+        xmlRaiseError(ctxt, XML_FROM_PARSER, ctxt->errNo, XML_ERR_FATAL,
+                      NULL, 0, (const char *) prefix,
+                      (const char *) localname, NULL, 0, 0,
+                      "Attribute %s:%s redefined\n", prefix, localname);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
         ctxt->disableSAX = 1;
@@ -201,13 +193,6 @@
 {
     const char *errmsg;
 
-    if (ctxt == NULL) {
-	xmlGenericError(xmlGenericErrorContext,
-			"xmlFatalErr: no context !\n");
-	return;
-    }
-    if ((ctxt->sax == NULL) || (ctxt->sax->error == NULL))
-        return;
     switch (error) {
         case XML_ERR_INVALID_HEX_CHARREF:
 	    errmsg = "CharRef: invalid hexadecimal value\n";
@@ -386,11 +371,8 @@
 	    errmsg = "Unregistered error message\n";
     }
     ctxt->errNo = error;
-    if (info == NULL) {
-        ctxt->sax->error(ctxt->userData, errmsg);
-    } else {
-        ctxt->sax->error(ctxt->userData, "%s: %s", errmsg, info);
-    }
+    xmlRaiseError(ctxt, XML_FROM_PARSER, error, XML_ERR_FATAL, 
+		  NULL, 0, info, NULL, NULL, 0, 0, errmsg, info);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
         ctxt->disableSAX = 1;
@@ -407,15 +389,9 @@
 static void
 xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *msg)
 {
-    if (ctxt == NULL) {
-	xmlGenericError(xmlGenericErrorContext,
-			"xmlFatalErr: no context !\n");
-	return;
-    }
     ctxt->errNo = error;
-    if ((ctxt->sax == NULL) || (ctxt->sax->error == NULL))
-        return;
-    ctxt->sax->error(ctxt->userData, msg);
+    xmlRaiseError(ctxt, XML_FROM_PARSER, error, XML_ERR_FATAL, 
+                  NULL, 0, NULL, NULL, NULL, 0, 0, msg);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
         ctxt->disableSAX = 1;
@@ -434,15 +410,9 @@
 xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
 		  const char *msg, int val)
 {
-    if (ctxt == NULL) {
-	xmlGenericError(xmlGenericErrorContext,
-			"xmlFatalErr: no context !\n");
-	return;
-    }
     ctxt->errNo = error;
-    if ((ctxt->sax == NULL) || (ctxt->sax->error == NULL))
-        return;
-    ctxt->sax->error(ctxt->userData, msg, val);
+    xmlRaiseError(ctxt, XML_FROM_PARSER, error, XML_ERR_FATAL, 
+                  NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
         ctxt->disableSAX = 1;
@@ -461,15 +431,9 @@
 xmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
 		  const char *msg, const xmlChar *val)
 {
-    if (ctxt == NULL) {
-	xmlGenericError(xmlGenericErrorContext,
-			"xmlFatalErr: no context !\n");
-	return;
-    }
     ctxt->errNo = error;
-    if ((ctxt->sax == NULL) || (ctxt->sax->error == NULL))
-        return;
-    ctxt->sax->error(ctxt->userData, msg, val);
+    xmlRaiseError(ctxt, XML_FROM_PARSER, error, XML_ERR_FATAL, 
+                  NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg, val);
     ctxt->wellFormed = 0;
     if (ctxt->recovery == 0)
         ctxt->disableSAX = 1;
@@ -490,21 +454,11 @@
          const char *msg,
 	 const xmlChar *info1, const xmlChar *info2, const xmlChar *info3)
 {
-    if (ctxt == NULL)
-	return;
-    if ((ctxt->sax == NULL) || (ctxt->sax->error == NULL))
-        return;
-
     ctxt->errNo = error;
-    if (info1 == NULL) {
-        ctxt->sax->error(ctxt->userData, msg);
-    } else if (info2 == NULL) {
-        ctxt->sax->error(ctxt->userData, msg, info1);
-    } else if (info3 == NULL) {
-        ctxt->sax->error(ctxt->userData, msg, info1, info2);
-    } else {
-        ctxt->sax->error(ctxt->userData, msg, info1, info2, info3);
-    }
+    xmlRaiseError(ctxt, XML_FROM_NAMESPACE, error, XML_ERR_ERROR, 
+                  NULL, 0, (const char *) info1, (const char *) info2,
+		  (const char *) info3, 0, 0,
+		  msg, info1, info2, info3);
     ctxt->nsWellFormed = 0;
 }
 
@@ -9411,6 +9365,8 @@
 		    break;
 		}
 
+		if (avail < 2)
+		    goto done;
 		cur = ctxt->input->cur[0];
 		next = ctxt->input->cur[1];
 		if (cur == 0) {
@@ -12087,6 +12043,7 @@
 #endif
     xmlCleanupThreads();
     xmlCleanupGlobals();
+    xmlResetLastError();
     xmlParserInitialized = 0;
 }