1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-21 14:53:44 +03:00

applied patch from Julien Reichel cleaning up mode and state internal

* xmlreader.c: applied patch from Julien Reichel cleaning up mode
  and state internal flags mixups
Daniel

svn path=/trunk/; revision=3588
This commit is contained in:
Daniel Veillard
2007-03-09 16:59:05 +00:00
parent ee0b982fe8
commit a9c5677c22
2 changed files with 27 additions and 11 deletions

View File

@@ -1,3 +1,8 @@
Fri Mar 9 17:54:40 CET 2007 Daniel Veillard <daniel@veillard.com>
* xmlreader.c: applied patch from Julien Reichel cleaning up mode
and state internal flags mixups
Wed Mar 7 16:18:18 HKT 2007 William Brack <wbrack@mmm.com.hk> Wed Mar 7 16:18:18 HKT 2007 William Brack <wbrack@mmm.com.hk>
* xpath.c: fixed xmlXPathCmpNodes for incorrect result on certain * xpath.c: fixed xmlXPathCmpNodes for incorrect result on certain

View File

@@ -869,13 +869,13 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
* parser. * parser.
*/ */
else if (reader->mode == XML_TEXTREADER_MODE_EOF) { else if (reader->mode == XML_TEXTREADER_MODE_EOF) {
if (reader->mode != XML_TEXTREADER_DONE) { if (reader->state != XML_TEXTREADER_DONE) {
s = inbuf->use - reader->cur; s = inbuf->use - reader->cur;
val = xmlParseChunk(reader->ctxt, val = xmlParseChunk(reader->ctxt,
(const char *) &inbuf->content[reader->cur], (const char *) &inbuf->content[reader->cur],
s, 1); s, 1);
reader->cur = inbuf->use; reader->cur = inbuf->use;
reader->mode = XML_TEXTREADER_DONE; reader->state = XML_TEXTREADER_DONE;
if ((val != 0) || (reader->ctxt->wellFormed == 0)) if ((val != 0) || (reader->ctxt->wellFormed == 0))
return(-1); return(-1);
} }
@@ -1169,8 +1169,10 @@ xmlTextReaderDoExpand(xmlTextReaderPtr reader) {
if (reader->mode == XML_TEXTREADER_MODE_EOF) if (reader->mode == XML_TEXTREADER_MODE_EOF)
return(1); return(1);
val = xmlTextReaderPushData(reader); val = xmlTextReaderPushData(reader);
if (val < 0) if (val < 0){
reader->mode == XML_TEXTREADER_MODE_ERROR;
return(-1); return(-1);
}
} while(reader->mode != XML_TEXTREADER_MODE_EOF); } while(reader->mode != XML_TEXTREADER_MODE_EOF);
return(1); return(1);
} }
@@ -1257,17 +1259,23 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
*/ */
do { do {
val = xmlTextReaderPushData(reader); val = xmlTextReaderPushData(reader);
if (val < 0) if (val < 0){
reader->mode = XML_TEXTREADER_MODE_ERROR;
reader->state = XML_TEXTREADER_ERROR;
return(-1); return(-1);
}
} while ((reader->ctxt->node == NULL) && } while ((reader->ctxt->node == NULL) &&
((reader->mode != XML_TEXTREADER_MODE_EOF) && ((reader->mode != XML_TEXTREADER_MODE_EOF) &&
(reader->mode != XML_TEXTREADER_DONE))); (reader->state != XML_TEXTREADER_DONE)));
if (reader->ctxt->node == NULL) { if (reader->ctxt->node == NULL) {
if (reader->ctxt->myDoc != NULL) { if (reader->ctxt->myDoc != NULL) {
reader->node = reader->ctxt->myDoc->children; reader->node = reader->ctxt->myDoc->children;
} }
if (reader->node == NULL) if (reader->node == NULL){
reader->mode = XML_TEXTREADER_MODE_ERROR;
reader->state = XML_TEXTREADER_ERROR;
return(-1); return(-1);
}
reader->state = XML_TEXTREADER_ELEMENT; reader->state = XML_TEXTREADER_ELEMENT;
} else { } else {
if (reader->ctxt->myDoc != NULL) { if (reader->ctxt->myDoc != NULL) {
@@ -1287,7 +1295,7 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
get_next_node: get_next_node:
if (reader->node == NULL) { if (reader->node == NULL) {
if (reader->mode == XML_TEXTREADER_DONE) if (reader->mode == XML_TEXTREADER_MODE_EOF)
return(0); return(0);
else else
return(-1); return(-1);
@@ -1314,8 +1322,11 @@ get_next_node:
(reader->ctxt->node == reader->node->parent)) && (reader->ctxt->node == reader->node->parent)) &&
(reader->ctxt->instate != XML_PARSER_EOF)) { (reader->ctxt->instate != XML_PARSER_EOF)) {
val = xmlTextReaderPushData(reader); val = xmlTextReaderPushData(reader);
if (val < 0) if (val < 0){
reader->mode = XML_TEXTREADER_MODE_ERROR;
reader->state = XML_TEXTREADER_ERROR;
return(-1); return(-1);
}
if (reader->node == NULL) if (reader->node == NULL)
goto node_end; goto node_end;
} }
@@ -1394,9 +1405,9 @@ get_next_node:
(reader->node->type == XML_DOCB_DOCUMENT_NODE) || (reader->node->type == XML_DOCB_DOCUMENT_NODE) ||
#endif #endif
(reader->node->type == XML_HTML_DOCUMENT_NODE)) { (reader->node->type == XML_HTML_DOCUMENT_NODE)) {
if (reader->mode != XML_TEXTREADER_DONE) { if (reader->mode != XML_TEXTREADER_MODE_EOF) {
val = xmlParseChunk(reader->ctxt, "", 0, 1); val = xmlParseChunk(reader->ctxt, "", 0, 1);
reader->mode = XML_TEXTREADER_DONE; reader->state = XML_TEXTREADER_DONE;
if (val != 0) if (val != 0)
return(-1); return(-1);
} }
@@ -1550,7 +1561,7 @@ node_found:
#endif /* LIBXML_PATTERN_ENABLED */ #endif /* LIBXML_PATTERN_ENABLED */
return(1); return(1);
node_end: node_end:
reader->mode = XML_TEXTREADER_DONE; reader->state = XML_TEXTREADER_DONE;
return(0); return(0);
} }