make sure we report errors if xmlNewInputFromFile() fails. avoid using

* libxml.h parserInternals.c xmlIO.c: make sure we report errors
  if xmlNewInputFromFile() fails.
* xmlreader.c: avoid using _private for the node or document
  elements.
Daniel
diff --git a/ChangeLog b/ChangeLog
index 246a553..221ae4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Oct 27 06:17:30 EST 2003 Daniel Veillard <daniel@veillard.com>
+
+	* libxml.h parserInternals.c xmlIO.c: make sure we report errors
+	  if xmlNewInputFromFile() fails.
+	* xmlreader.c: avoid using _private for the node or document
+	  elements.
+
 Sat Oct 25 17:33:59 CEST 2003 Igor Zlatkovic <igor@zlatkovic.com>
 
 	* win32/configure.js: added declaration for verMicroSuffix
diff --git a/libxml.h b/libxml.h
index 7c98d13..69e02a2 100644
--- a/libxml.h
+++ b/libxml.h
@@ -44,5 +44,9 @@
  * function while checking if the callback exists.
  */
 extern int __xmlRegisterCallbacks;
+/*
+ * internal error reporting routines, shared but not partof the API.
+ */
 void __xmlIOErr(int domain, int code, const char *extra);
+void __xmlLoaderErr(void *ctx, const char *msg, const char *filename);
 #endif /* ! __XML_LIBXML_H__ */
diff --git a/parserInternals.c b/parserInternals.c
index 6b3df55..7d18788 100644
--- a/parserInternals.c
+++ b/parserInternals.c
@@ -1445,8 +1445,11 @@
 		"new input from file: %s\n", filename);
     if (ctxt == NULL) return(NULL);
     buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
-    if (buf == NULL)
+    if (buf == NULL) {
+        __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
+                     (const char *) filename);
 	return(NULL);
+    }
 
     inputStream = xmlNewInputStream(ctxt);
     if (inputStream == NULL) {
diff --git a/xmlIO.c b/xmlIO.c
index d62f7e5..9f2fecb 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -394,15 +394,16 @@
 }
 
 /**
- * xmlLoaderErr:
- * @ctxt: the parser context
+ * __xmlLoaderErr:
+ * @ctx: the parser context
  * @extra:  extra informations
  *
  * Handle a resource access error
  */
-static void
-xmlLoaderErr(xmlParserCtxtPtr ctxt, const char *msg, const char *filename)
+void
+__xmlLoaderErr(void *ctx, const char *msg, const char *filename)
 {
+    xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
     xmlStructuredErrorFunc schannel = NULL;
     xmlGenericErrorFunc channel = NULL;
     void *data = NULL;
@@ -2985,10 +2986,10 @@
         if (code >= 400) {
             /* fatal error */
 	    if (ret->filename != NULL)
-		xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
+		__xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
                          (const char *) ret->filename);
 	    else
-		xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
+		__xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
             xmlFreeInputStream(ret);
             ret = NULL;
         } else {
@@ -3149,14 +3150,10 @@
     if (resource == NULL) {
         if (ID == NULL)
             ID = "NULL";
-        xmlLoaderErr(ctxt, "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) {
-        xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
-                     (const char *) resource);
-    }
     if ((resource != NULL) && (resource != (xmlChar *) URL))
         xmlFree(resource);
     return (ret);
diff --git a/xmlreader.c b/xmlreader.c
index 1bb2f7a..60b73f5 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -139,9 +139,8 @@
 #endif
 };
 
-static const char *xmlTextReaderIsEmpty = "This element is empty";
-static const char *xmlTextReaderIsEmptyPreserved = "Preserve this element";
-static const char *xmlTextReaderIsPreserved = "Preserve this element";
+#define NODE_IS_EMPTY		0x1
+#define NODE_IS_PRESERVED	0x2
 
 /**
  * CONSTSTR:
@@ -529,7 +528,7 @@
 	if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
 	    (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
 	    (ctxt->input->cur[1] == '>'))
-	    ctxt->node->_private = (void *) xmlTextReaderIsEmpty;
+	    ctxt->node->extra = NODE_IS_EMPTY;
     }
     if (reader != NULL)
 	reader->state = XML_TEXTREADER_ELEMENT;
@@ -594,7 +593,7 @@
 	if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
 	    (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
 	    (ctxt->input->cur[1] == '>'))
-	    ctxt->node->_private = (void *) xmlTextReaderIsEmpty;
+	    ctxt->node->extra = NODE_IS_EMPTY;
     }
     if (reader != NULL)
 	reader->state = XML_TEXTREADER_ELEMENT;
@@ -981,8 +980,7 @@
 	        xmlNodePtr tmp;
 		if (reader->entNr == 0) {
 		    while ((tmp = node->last) != NULL) {
-			if ((tmp->_private != xmlTextReaderIsEmptyPreserved) &&
-			    (tmp->_private != xmlTextReaderIsPreserved)) {
+			if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
 			    xmlUnlinkNode(tmp);
 			    xmlTextReaderFreeNode(reader, tmp);
 			} else
@@ -1105,8 +1103,6 @@
 	} while ((reader->ctxt->node == NULL) &&
 		 ((reader->mode != XML_TEXTREADER_MODE_EOF) &&
 		  (reader->mode != XML_TEXTREADER_DONE)));
-	if (reader->ctxt->myDoc != NULL)
-	    reader->ctxt->myDoc->_private = reader;
 	if (reader->ctxt->node == NULL) {
 	    if (reader->ctxt->myDoc != NULL) {
 		reader->node = reader->ctxt->myDoc->children;
@@ -1170,8 +1166,7 @@
 	if ((oldstate == XML_TEXTREADER_ELEMENT) &&
             (reader->node->type == XML_ELEMENT_NODE) &&
 	    (reader->node->children == NULL) &&
-	    (reader->node->_private != (void *)xmlTextReaderIsEmpty) &&
-	    (reader->node->_private != (void *)xmlTextReaderIsEmptyPreserved)) {
+	    ((reader->node->extra & NODE_IS_EMPTY) == 0)) {
 	    reader->state = XML_TEXTREADER_END;
 	    goto node_found;
 	}
@@ -1190,8 +1185,7 @@
             (reader->node->prev->type != XML_DTD_NODE) &&
 	    (reader->entNr == 0)) {
 	    xmlNodePtr tmp = reader->node->prev;
-	    if ((tmp->_private != xmlTextReaderIsEmptyPreserved) &&
-	        (tmp->_private != xmlTextReaderIsPreserved)) {
+	    if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
 		xmlUnlinkNode(tmp);
 		xmlTextReaderFreeNode(reader, tmp);
 	    }
@@ -1202,7 +1196,7 @@
     if ((oldstate == XML_TEXTREADER_ELEMENT) &&
 	(reader->node->type == XML_ELEMENT_NODE) &&
 	(reader->node->children == NULL) &&
-	(reader->node->_private != (void *)xmlTextReaderIsEmpty)) {
+	((reader->node->extra & NODE_IS_EMPTY) == 0)) {;
 	reader->state = XML_TEXTREADER_END;
 	goto node_found;
     }
@@ -1228,8 +1222,7 @@
 	 * Cleanup of the old node
 	 */
 	if ((oldnode->type != XML_DTD_NODE) &&
-	    (oldnode->_private != xmlTextReaderIsEmptyPreserved) &&
-	    (oldnode->_private != xmlTextReaderIsPreserved) &&
+	    ((oldnode->extra & NODE_IS_PRESERVED) == 0) &&
 	    (reader->entNr == 0)) {
 	    xmlUnlinkNode(oldnode);
 	    xmlTextReaderFreeNode(reader, oldnode);
@@ -1370,9 +1363,7 @@
         return(xmlTextReaderRead(reader));
     if (reader->state == XML_TEXTREADER_END)
         return(xmlTextReaderRead(reader));
-    if (cur->_private == (void *)xmlTextReaderIsEmpty)
-        return(xmlTextReaderRead(reader));
-    if (cur->_private == (void *)xmlTextReaderIsEmptyPreserved)
+    if (cur->extra & NODE_IS_EMPTY)
         return(xmlTextReaderRead(reader));
     do {
         ret = xmlTextReaderRead(reader);
@@ -2561,8 +2552,7 @@
 	return(0);
     if (reader->state == XML_TEXTREADER_END)
 	return(0);
-    return((reader->node->_private == (void *)xmlTextReaderIsEmpty) ||
-           (reader->node->_private == (void *)xmlTextReaderIsEmptyPreserved));
+    return((reader->node->extra & NODE_IS_EMPTY) != 0);
 }
 
 /**
@@ -3361,14 +3351,11 @@
         cur = reader->node;
     if (cur == NULL)
         return(NULL);
-    if (cur->_private == (void *)xmlTextReaderIsEmpty)
-        cur->_private = (void *)xmlTextReaderIsEmptyPreserved;
-    else
-        cur->_private = (void *)xmlTextReaderIsPreserved;
+    cur->extra |= NODE_IS_PRESERVED;
         
     parent = cur->parent;;
     while (parent != NULL) {
-        parent->_private = (void *)xmlTextReaderIsPreserved;
+        parent->extra |= NODE_IS_PRESERVED;
 	parent = parent->parent;
     }
     return(cur);