From 4dbe77a84f4ff3c5785906e76adbc21bb6e259b4 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Tue, 14 Jan 2003 00:17:42 +0000 Subject: [PATCH] fixed the streaming property of the reader, it was generating tree faster * xmlreader.c: fixed the streaming property of the reader, it was generating tree faster than consuming it. Pointed out by Nate Myers * tree.c: fixed a bug in xmlSaveFormatFileEnc if passed a NULL doc Daniel --- ChangeLog | 7 +++++++ tree.c | 3 +++ xmlreader.c | 15 +++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index a3edd8d4..e710c460 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Jan 14 01:15:04 CET 2003 Daniel Veillard + + * xmlreader.c: fixed the streaming property of the reader, + it was generating tree faster than consuming it. Pointed out + by Nate Myers + * tree.c: fixed a bug in xmlSaveFormatFileEnc if passed a NULL doc + Sun Jan 12 22:18:02 CET 2003 Igor Zlatkovic * win32/libxml2.def.src: added more xmlreader and other exports diff --git a/tree.c b/tree.c index bae197ad..4e3f749c 100644 --- a/tree.c +++ b/tree.c @@ -7582,6 +7582,9 @@ xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur, xmlCharEncoding enc; int ret; + if (cur == NULL) + return(-1); + if (encoding == NULL) encoding = (const char *) cur->encoding; diff --git a/xmlreader.c b/xmlreader.c index 316ff15a..72032174 100644 --- a/xmlreader.c +++ b/xmlreader.c @@ -606,8 +606,13 @@ get_next_node: while (((oldstate == XML_TEXTREADER_BACKTRACK) || (reader->node->children == NULL) || (reader->node->type == XML_ENTITY_REF_NODE) || - (reader->node->type == XML_DTD_NODE)) && + (reader->node->type == XML_DTD_NODE) || + (reader->node->type == XML_DOCUMENT_NODE) || + (reader->node->type == XML_HTML_DOCUMENT_NODE)) && (reader->node->next == NULL) && + ((reader->ctxt->node == NULL) || + (reader->ctxt->node == reader->node) || + (reader->ctxt->node == reader->node->parent)) && (reader->ctxt->nodeNr == olddepth) && (reader->ctxt->instate != XML_PARSER_EOF)) { val = xmlTextReaderPushData(reader); @@ -643,9 +648,11 @@ get_next_node: /* * Cleanup of the old node */ - if (oldnode->type != XML_DTD_NODE) { - xmlUnlinkNode(oldnode); - xmlFreeNode(oldnode); + if ((reader->node->prev != NULL) && + (reader->node->prev->type != XML_DTD_NODE)) { + xmlNodePtr tmp = reader->node->prev; + xmlUnlinkNode(tmp); + xmlFreeNode(tmp); } goto node_found;