1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-08-01 10:06:59 +03:00

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
This commit is contained in:
Daniel Veillard
2003-01-14 00:17:42 +00:00
parent d105eb6fb8
commit 4dbe77a84f
3 changed files with 21 additions and 4 deletions

View File

@ -1,3 +1,10 @@
Tue Jan 14 01:15:04 CET 2003 Daniel Veillard <daniel@veillard.com>
* 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 <igor@stud.fh-frankfurt.de> Sun Jan 12 22:18:02 CET 2003 Igor Zlatkovic <igor@stud.fh-frankfurt.de>
* win32/libxml2.def.src: added more xmlreader and other exports * win32/libxml2.def.src: added more xmlreader and other exports

3
tree.c
View File

@ -7582,6 +7582,9 @@ xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur,
xmlCharEncoding enc; xmlCharEncoding enc;
int ret; int ret;
if (cur == NULL)
return(-1);
if (encoding == NULL) if (encoding == NULL)
encoding = (const char *) cur->encoding; encoding = (const char *) cur->encoding;

View File

@ -606,8 +606,13 @@ get_next_node:
while (((oldstate == XML_TEXTREADER_BACKTRACK) || while (((oldstate == XML_TEXTREADER_BACKTRACK) ||
(reader->node->children == NULL) || (reader->node->children == NULL) ||
(reader->node->type == XML_ENTITY_REF_NODE) || (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->node->next == NULL) &&
((reader->ctxt->node == NULL) ||
(reader->ctxt->node == reader->node) ||
(reader->ctxt->node == reader->node->parent)) &&
(reader->ctxt->nodeNr == olddepth) && (reader->ctxt->nodeNr == olddepth) &&
(reader->ctxt->instate != XML_PARSER_EOF)) { (reader->ctxt->instate != XML_PARSER_EOF)) {
val = xmlTextReaderPushData(reader); val = xmlTextReaderPushData(reader);
@ -643,9 +648,11 @@ get_next_node:
/* /*
* Cleanup of the old node * Cleanup of the old node
*/ */
if (oldnode->type != XML_DTD_NODE) { if ((reader->node->prev != NULL) &&
xmlUnlinkNode(oldnode); (reader->node->prev->type != XML_DTD_NODE)) {
xmlFreeNode(oldnode); xmlNodePtr tmp = reader->node->prev;
xmlUnlinkNode(tmp);
xmlFreeNode(tmp);
} }
goto node_found; goto node_found;