Reuse code with pre-parse adjustments
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 42659f2..af76436 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -1820,15 +1820,7 @@
_charBuffer[size] = 0;
- const char* p = _charBuffer;
- p = XMLUtil::SkipWhiteSpace( p );
- p = XMLUtil::ReadBOM( p, &_writeBOM );
- if ( !*p ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
-
- ParseDeep( _charBuffer + (p-_charBuffer), 0 );
+ Parse();
return _errorID;
}
@@ -1869,16 +1861,7 @@
memcpy( _charBuffer, p, len );
_charBuffer[len] = 0;
- const char* start = p;
- p = XMLUtil::SkipWhiteSpace( p );
- p = XMLUtil::ReadBOM( p, &_writeBOM );
- if ( !*p ) {
- SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
- return _errorID;
- }
-
- ptrdiff_t delta = p - start; // skip initial whitespace, BOM, etc.
- ParseDeep( _charBuffer+delta, 0 );
+ Parse();
if ( Error() ) {
// clean up now essentially dangling memory.
// and the parse fail can put objects in the
@@ -1936,6 +1919,19 @@
}
}
+void XMLDocument::Parse()
+{
+ TIXMLASSERT( NoChildren() ); // Clear() must have been called previously
+ TIXMLASSERT( _charBuffer );
+ const char* p = _charBuffer;
+ p = XMLUtil::SkipWhiteSpace( p );
+ p = XMLUtil::ReadBOM( p, &_writeBOM );
+ if ( !*p ) {
+ SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
+ return;
+ }
+ ParseDeep( _charBuffer + (p-_charBuffer), 0 );
+}
XMLPrinter::XMLPrinter( FILE* file, bool compact, int depth ) :
_elementJustOpened( false ),