コード例 #1
0
ファイル: tinyxml2.cpp プロジェクト: dominik-uebele/E1
	XMLError XMLDocument::Parse( const char* p, size_t len )
	{
		const char* start = p;
		Clear();

		if ( !p || !*p ) {
			SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
			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::ReadBOM( p, &_writeBOM );
		if ( !p || !*p ) {
			SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
			return _errorID;
		}

		ptrdiff_t delta = p - start;	// skip initial whitespace, BOM, etc.
		ParseDeep( _charBuffer+delta, 0 );
		return _errorID;
	}
コード例 #2
0
ファイル: tinyxml2.cpp プロジェクト: LaughingYan/cocos2d-x
XMLError XMLDocument::Parse( const char* p, size_t len )
{
    DeleteChildren();
    InitDocument();

    if ( !p || !*p ) {
        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
        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::ReadBOM( p, &_writeBOM );
    if ( !p || !*p ) {
        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
        return _errorID;
    }

    ParseDeep( _charBuffer, 0 );
    return _errorID;
}
コード例 #3
0
ファイル: tinyxml2.cpp プロジェクト: LaughingYan/cocos2d-x
XMLError XMLDocument::LoadFile( const char* filename )
{
    DeleteChildren();
    InitDocument();
    FILE* fp = 0;

#if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (CC_TARGET_PLATFORM != CC_PLATFORM_MARMALADE)
    errno_t err = fopen_s(&fp, filename, "rb" );
    if ( !fp || err) {
#else
    fp = fopen( filename, "rb" );
    if ( !fp) {
#endif
        SetError( XML_ERROR_FILE_NOT_FOUND, filename, 0 );
        return _errorID;
    }
    LoadFile( fp );
    fclose( fp );
    return _errorID;
}


XMLError XMLDocument::LoadFile( FILE* fp )
{
    DeleteChildren();
    InitDocument();

    fseek( fp, 0, SEEK_END );
    size_t size = ftell( fp );
    fseek( fp, 0, SEEK_SET );

    if ( size == 0 ) {
        return _errorID;
    }

    _charBuffer = new char[size+1];
    size_t read = fread( _charBuffer, 1, size, fp );
    if ( read != size ) {
        SetError( XML_ERROR_FILE_READ_ERROR, 0, 0 );
        return _errorID;
    }

    _charBuffer[size] = 0;

    const char* p = _charBuffer;
    p = XMLUtil::SkipWhiteSpace( p );
    p = XMLUtil::ReadBOM( p, &_writeBOM );
    if ( !p || !*p ) {
        SetError( XML_ERROR_EMPTY_DOCUMENT, 0, 0 );
        return _errorID;
    }

    ParseDeep( _charBuffer + (p-_charBuffer), 0 );
    return _errorID;
}
コード例 #4
0
	XMLError XMLDocument::LoadFile(FILE* fp)
	{
		Clear();

		fseek(fp, 0, SEEK_SET);
		if (fgetc(fp) == EOF && ferror(fp) != 0)
		{
			SetError(XML_ERROR_FILE_READ_ERROR, 0, 0);
			return _errorID;
		}

		fseek(fp, 0, SEEK_END);
		const long filelength = ftell(fp);
		fseek(fp, 0, SEEK_SET);
		if (filelength == -1L)
		{
			SetError(XML_ERROR_FILE_READ_ERROR, 0, 0);
			return _errorID;
		}

		const size_t size = filelength;
		if (size == 0)
		{
			SetError(XML_ERROR_EMPTY_DOCUMENT, 0, 0);
			return _errorID;
		}

		_charBuffer = new char[size + 1];
		size_t read = fread(_charBuffer, 1, size, fp);
		if (read != size)
		{
			SetError(XML_ERROR_FILE_READ_ERROR, 0, 0);
			return _errorID;
		}

		_charBuffer[size] = 0;

		const char* p = _charBuffer;
		p = XMLUtil::SkipWhiteSpace(p);
		p = XMLUtil::ReadBOM(p, &_writeBOM);
		if (!p || !*p)
		{
			SetError(XML_ERROR_EMPTY_DOCUMENT, 0, 0);
			return _errorID;
		}

		ParseDeep(_charBuffer + (p - _charBuffer), 0);
		return _errorID;
	}
コード例 #5
0
	XMLError XMLDocument::Parse(const char* p, size_t len)
	{
		const char* start = p;
		Clear();

		if (len == 0 || !p || !*p)
		{
			SetError(XML_ERROR_EMPTY_DOCUMENT, 0, 0);
			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::ReadBOM(p, &_writeBOM);
		if (!p || !*p)
		{
			SetError(XML_ERROR_EMPTY_DOCUMENT, 0, 0);
			return _errorID;
		}

		ptrdiff_t delta = p - start;	// skip initial whitespace, BOM, etc.
		ParseDeep(_charBuffer + delta, 0);
		if (_errorID)
		{
			// clean up now essentially dangling memory.
			// and the parse fail can put objects in the
			// pools that are dead and inaccessible.
			DeleteChildren();
			_elementPool.Clear();
			_attributePool.Clear();
			_textPool.Clear();
			_commentPool.Clear();
		}
		return _errorID;
	}