Christian Glahn found a small bug in the push parser. cleaned up and made

* parser.c: Christian Glahn found a small bug in the push parser.
* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
  public
Daniel
diff --git a/ChangeLog b/ChangeLog
index 5e5883f..11a6162 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Oct 14 13:12:55 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+	* parser.c: Christian Glahn found a small bug in the push parser.
+	* xmlIO.c include/libxml/xmlIO.h: cleaned up and made xmlCheckFilename
+	  public
+
 Wed Oct  9 23:11:02 CEST 2002 Daniel Veillard <daniel@veillard.com>
 
 	* xmlschemas.c include/libxml/xmlschemas.h: added
diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h
index 7daa717..d0ef8d6 100644
--- a/include/libxml/xmlIO.h
+++ b/include/libxml/xmlIO.h
@@ -254,6 +254,7 @@
 
 xmlChar *xmlNormalizeWindowsPath	(const xmlChar *path);
 
+int	xmlCheckFilename		(const char *path);
 /**
  * Default 'file://' protocol callbacks 
  */
diff --git a/parser.c b/parser.c
index 7311c9e..2c57954 100644
--- a/parser.c
+++ b/parser.c
@@ -8894,6 +8894,14 @@
 	/*
 	 * Check for termination
 	 */
+	    int avail = 0;
+	    if (ctxt->input->buf == NULL)
+                avail = ctxt->input->length -
+		        (ctxt->input->cur - ctxt->input->base);
+            else
+                avail = ctxt->input->buf->buffer->use -
+		        (ctxt->input->cur - ctxt->input->base);
+			    
 	if ((ctxt->instate != XML_PARSER_EOF) &&
 	    (ctxt->instate != XML_PARSER_EPILOG)) {
 	    ctxt->errNo = XML_ERR_DOCUMENT_END;
@@ -8903,6 +8911,15 @@
 	    ctxt->wellFormed = 0;
 	    ctxt->disableSAX = 1;
 	} 
+	if ((ctxt->instate == XML_PARSER_EPILOG) && (avail > 0)) {
+	    ctxt->errNo = XML_ERR_DOCUMENT_END;
+	    if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
+		ctxt->sax->error(ctxt->userData,
+		    "Extra content at the end of the document\n");
+	    ctxt->wellFormed = 0;
+	    ctxt->disableSAX = 1;
+
+	}
 	if (ctxt->instate != XML_PARSER_EOF) {
 	    if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
 		ctxt->sax->endDocument(ctxt->userData);
diff --git a/xmlIO.c b/xmlIO.c
index 796c8ac..0972e3f 100644
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -261,25 +261,22 @@
  * returns 1.  if stat fails, returns 0 (if calling
  * stat on the filename fails, it can't be right).
  * if stat succeeds and the file is a directory,
- * sets errno to EISDIR and returns 0.  otherwise
- * returns 1.
+ * returns 2.  otherwise returns 1.
  */
 
-static int
+int
 xmlCheckFilename (const char *path)
 {
 #ifdef HAVE_STAT
-#ifdef S_ISDIR
     struct stat stat_buffer;
 
     if (stat(path, &stat_buffer) == -1)
         return 0;
 
+#ifdef S_ISDIR
     if (S_ISDIR(stat_buffer.st_mode)) {
-        errno = EISDIR;
-        return 0;
+        return 2;
     }
-
 #endif
 #endif
     return 1;
@@ -992,7 +989,7 @@
 xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
 {
     if ( ctxt->uri != NULL )
-	free( ctxt->uri );
+	xmlFree( ctxt->uri );
 
     if ( ctxt->doc_buff != NULL ) {
 
@@ -1007,7 +1004,7 @@
 	}
     }
 
-    free( ctxt );
+    xmlFree( ctxt );
     return;
 }