accept a nBytes argument for Parse()

This commit is contained in:
Lee Thomason (grinliz) 2012-09-17 17:58:25 -07:00
parent 2f1f6247e0
commit e2bcb32494
3 changed files with 22 additions and 7 deletions

View File

@ -1622,7 +1622,7 @@ int XMLDocument::SaveFile( FILE* fp, bool compact )
} }
int XMLDocument::Parse( const char* p ) int XMLDocument::Parse( const char* p, size_t len )
{ {
DeleteChildren(); DeleteChildren();
InitDocument(); InitDocument();
@ -1631,6 +1631,13 @@ int XMLDocument::Parse( const char* p )
SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 ); SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
return errorID; return errorID;
} }
if ( len == (size_t)(-1) ) {
len = strlen( p );
}
charBuffer = new char[ len+1 ];
memcpy( charBuffer, p, len );
charBuffer[len] = 0;
p = XMLUtil::SkipWhiteSpace( p ); p = XMLUtil::SkipWhiteSpace( p );
p = XMLUtil::ReadBOM( p, &writeBOM ); p = XMLUtil::ReadBOM( p, &writeBOM );
if ( !p || !*p ) { if ( !p || !*p ) {
@ -1638,11 +1645,6 @@ int XMLDocument::Parse( const char* p )
return errorID; return errorID;
} }
size_t len = strlen( p );
charBuffer = new char[ len+1 ];
memcpy( charBuffer, p, len+1 );
ParseDeep( charBuffer, 0 ); ParseDeep( charBuffer, 0 );
return errorID; return errorID;
} }

View File

@ -1072,8 +1072,13 @@ public:
Parse an XML file from a character string. Parse an XML file from a character string.
Returns XML_NO_ERROR (0) on success, or Returns XML_NO_ERROR (0) on success, or
an errorID. an errorID.
You may optionally pass in the 'nBytes', which is
the number of bytes which will be parsed. If not
specified, TinyXML will assume 'xml' points to a
null terminated string.
*/ */
int Parse( const char* xml ); int Parse( const char* xml, size_t nBytes=(size_t)(-1) );
/** /**
Load an XML file from disk. Load an XML file from disk.

View File

@ -947,6 +947,14 @@ int main( int /*argc*/, const char ** /*argv*/ )
XMLTest( "Non-alpha element lead letter parses.", doc.Error(), false ); XMLTest( "Non-alpha element lead letter parses.", doc.Error(), false );
} }
{
const char* xml = "<element/>WOA THIS ISN'T GOING TO PARSE";
XMLDocument doc;
doc.Parse( xml, 10 );
//doc.Print();
XMLTest( "Set length of incoming data", doc.Error(), false );
}
// ----------- Whitespace ------------ // ----------- Whitespace ------------
{ {
const char* xml = "<element>" const char* xml = "<element>"