final error handling cleanup converted XInclude to the new error handling

* xmlIO.c: final error handling cleanup
* xinclude.c error.c: converted XInclude to the new error handling
* include/libxml/xmlerror.h: added XInclude errors
Daniel
diff --git a/xmlIO.c b/xmlIO.c
index 0698d04..6642a59 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -194,7 +194,7 @@
  * @code:  the error number
  * @extra:  extra informations
  *
- * Handle an out of memory condition
+ * Handle an I/O error
  */
 static void
 xmlIOErr(int code, const char *extra)
@@ -340,6 +340,37 @@
     __xmlSimpleError(XML_FROM_IO, code, NULL, IOerr[idx], extra);
 }
 
+/**
+ * xmlLoaderErr:
+ * @ctxt: the parser context
+ * @extra:  extra informations
+ *
+ * Handle a resource access error
+ */
+static void
+xmlLoaderErr(xmlParserCtxtPtr ctxt, const char *msg, const char *filename)
+{
+    xmlGenericErrorFunc channel = NULL;
+    void *data = NULL;
+    xmlErrorLevel level = XML_ERR_ERROR;
+
+    if ((ctxt != NULL) && (ctxt->sax != NULL)) {
+        if (ctxt->validate) {
+	    channel = ctxt->sax->error;
+	    level = XML_ERR_ERROR;
+	} else {
+	    channel = ctxt->sax->warning;
+	    level = XML_ERR_WARNING;
+	}
+	data = ctxt->userData;
+    }
+    __xmlRaiseError(channel, data, ctxt, NULL, XML_FROM_IO,
+                    XML_IO_LOAD_ERROR, level, NULL, 0,
+		    filename, NULL, NULL, 0, 0,
+		    msg, filename);
+                    
+}
+
 /************************************************************************
  *									*
  * 		Tree memory error handler				*
@@ -2986,24 +3017,13 @@
     if (resource == NULL) {
 	if (ID == NULL)
 	    ID = "NULL";
-	if ((ctxt->validate) && (ctxt->sax != NULL) && 
-            (ctxt->sax->error != NULL))
-	    ctxt->sax->error(ctxt->userData,
-		    "failed to load external entity \"%s\"\n", ID);
-	else if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-	    ctxt->sax->warning(ctxt->userData,
-		    "failed to load external entity \"%s\"\n", ID);
+	xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID);
         return(NULL);
     }
     ret = xmlNewInputFromFile(ctxt, (const char *)resource);
     if (ret == NULL) {
-	if ((ctxt->validate) && (ctxt->sax != NULL) && 
-            (ctxt->sax->error != NULL))
-	    ctxt->sax->error(ctxt->userData,
-		    "failed to load external entity \"%s\"\n", resource);
-	else if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-	    ctxt->sax->warning(ctxt->userData,
-		    "failed to load external entity \"%s\"\n", resource);
+	xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
+	             (const char *) resource);
     }
     if ((resource != NULL) && (resource != (xmlChar *) URL))
 	xmlFree(resource);