summaryrefslogtreecommitdiff
path: root/xmlreader.c
diff options
context:
space:
mode:
Diffstat (limited to 'xmlreader.c')
-rw-r--r--xmlreader.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/xmlreader.c b/xmlreader.c
index 41083ad..f3225aa 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -74,15 +74,6 @@
#define XML_TEXTREADER_CTXT 2
typedef enum {
- XML_TEXTREADER_MODE_INITIAL = 0,
- XML_TEXTREADER_MODE_INTERACTIVE = 1,
- XML_TEXTREADER_MODE_ERROR = 2,
- XML_TEXTREADER_MODE_EOF =3,
- XML_TEXTREADER_MODE_CLOSED = 4,
- XML_TEXTREADER_MODE_READING = 5
-} xmlTextReaderMode;
-
-typedef enum {
XML_TEXTREADER_NONE = -1,
XML_TEXTREADER_START= 0,
XML_TEXTREADER_ELEMENT= 1,
@@ -264,6 +255,9 @@ xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) {
dict = reader->ctxt->dict;
if (cur == NULL) return;
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue((xmlNodePtr) cur);
+
/* Check for ID removal -> leading to invalid references ! */
if ((cur->parent != NULL) && (cur->parent->doc != NULL) &&
((cur->parent->doc->intSubset != NULL) ||
@@ -338,6 +332,10 @@ xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
xmlTextReaderFreeNodeList(reader, cur->children);
cur->children = NULL;
}
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue(cur);
+
if (((cur->type == XML_ELEMENT_NODE) ||
(cur->type == XML_XINCLUDE_START) ||
(cur->type == XML_XINCLUDE_END)) &&
@@ -408,6 +406,10 @@ xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
xmlTextReaderFreeNodeList(reader, cur->children);
cur->children = NULL;
}
+
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue(cur);
+
if (((cur->type == XML_ELEMENT_NODE) ||
(cur->type == XML_XINCLUDE_START) ||
(cur->type == XML_XINCLUDE_END)) &&
@@ -431,6 +433,7 @@ xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
if ((cur->type != XML_TEXT_NODE) &&
(cur->type != XML_COMMENT_NODE))
DICT_FREE(cur->name);
+
if (((cur->type == XML_ELEMENT_NODE) ||
(cur->type == XML_TEXT_NODE)) &&
(reader != NULL) && (reader->ctxt != NULL) &&
@@ -467,6 +470,9 @@ xmlTextReaderFreeDoc(xmlTextReaderPtr reader, xmlDocPtr cur) {
if (cur == NULL) return;
+ if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
+ xmlDeregisterNodeDefaultValue((xmlNodePtr) cur);
+
/*
* Do this before freeing the children list to avoid ID lookups
*/
@@ -497,6 +503,7 @@ xmlTextReaderFreeDoc(xmlTextReaderPtr reader, xmlDocPtr cur) {
if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs);
if (cur->URL != NULL) xmlFree((char *) cur->URL);
if (cur->dict != NULL) xmlDictFree(cur->dict);
+
xmlFree(cur);
}
@@ -1224,12 +1231,19 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
oldnode = reader->node;
get_next_node:
+ if (reader->node == NULL) {
+ if (reader->mode == XML_TEXTREADER_DONE)
+ return(0);
+ else
+ return(-1);
+ }
+
/*
* If we are not backtracking on ancestors or examined nodes,
* that the parser didn't finished or that we arent at the end
* of stream, continue processing.
*/
- while ((reader->node->next == NULL) &&
+ while ((reader->node != NULL) && (reader->node->next == NULL) &&
(reader->ctxt->nodeNr == olddepth) &&
((oldstate == XML_TEXTREADER_BACKTRACK) ||
(reader->node->children == NULL) ||