diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 77c1a8a..0dc5cd4 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -1765,6 +1765,24 @@ static FILE* callfopen( const char* filepath, const char* mode ) #endif return fp; } + +void XMLDocument::DeleteNode( XMLNode* node ) { + TIXMLASSERT( node ); + TIXMLASSERT(node->_document == this ); + if (node->_parent) { + node->_parent->DeleteChild( node ); + } + else { + // Isn't in the tree. + // Use the parent delete. + // Also, we need to mark it tracked: we 'know' + // it was never used. + node->_memPool->SetTracked(); + // Call the static XMLNode version: + XMLNode::DeleteNode(node); + } +} + XMLError XMLDocument::LoadFile( const char* filename ) { @@ -1949,9 +1967,9 @@ XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) : _entityFlag[ (int)entities[i].value ] = true; } } - _restrictedEntityFlag[(int)'&'] = true; - _restrictedEntityFlag[(int)'<'] = true; - _restrictedEntityFlag[(int)'>'] = true; // not required, but consistency is nice + _restrictedEntityFlag['&'] = true; + _restrictedEntityFlag['<'] = true; + _restrictedEntityFlag['>'] = true; // not required, but consistency is nice _buffer.Push( 0 ); } diff --git a/tinyxml2.h b/tinyxml2.h index 54190c9..dd1b2cd 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -1555,7 +1555,11 @@ public: /** Load an XML file from disk. You are responsible - for providing and closing the FILE*. + for providing and closing the FILE*. + + NOTE: The file should be opened as binary ("rb") + not text in order for TinyXML-2 to correctly + do newline normalization. Returns XML_NO_ERROR (0) on success, or an errorID. @@ -1665,11 +1669,7 @@ public: Delete a node associated with this document. It will be unlinked from the DOM. */ - void DeleteNode( XMLNode* node ) { - TIXMLASSERT( node ); - TIXMLASSERT( node->_parent ); - node->_parent->DeleteChild( node ); - } + void DeleteNode( XMLNode* node ); void SetError( XMLError error, const char* str1, const char* str2 ); diff --git a/xmltest.cpp b/xmltest.cpp index 18fa8c9..ebcd4dd 100644 --- a/xmltest.cpp +++ b/xmltest.cpp @@ -1334,10 +1334,10 @@ int main( int argc, const char ** argv ) { // Test that it doesn't crash. - const char* xml = "<12"; - XMLDocument doc; - doc.Parse(xml); - doc.PrintError(); + const char* xml = "<12"; + XMLDocument doc; + doc.Parse(xml); + doc.PrintError(); } #if 1 @@ -1390,6 +1390,13 @@ int main( int argc, const char ** argv ) doc.Clear(); } } + + { + // If this doesn't assert in DEBUG, all is well. + tinyxml2::XMLDocument doc; + tinyxml2::XMLElement *pRoot = doc.NewElement("Root"); + doc.DeleteNode(pRoot); + } // ----------- Performance tracking --------------