Fix XML reader creation for non-existing files and invalid callbacks to return 0.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1482 dfc29bdd-3216-0410-991c-e03cc46cb475
master
hybrid 2008-08-10 16:08:25 +00:00
parent 45f581d75c
commit aca761b6d6
3 changed files with 27 additions and 12 deletions

View File

@ -1,5 +1,9 @@
Changes in version 1.5 (... 2008)
- Fix XML reader creation for non-existing files and invalid callbacks.
- Avoid loading textures which are not used by the mesh in b3d loader.
- Added scaleTCoords methods to MeshManipulator
- Enable use of other meshes for shadow mesh generation, can be used to speed up shadow generation and rendering for complex meshes. Patch based on a version by tonic.

View File

@ -550,7 +550,9 @@ private:
//! reads the xml file and converts it into the wanted character format.
bool readFile(IFileReadCallBack* callback)
{
int size = callback->getSize();
long size = callback->getSize();
if (size<0)
return false;
size += 4; // We need two terminating 0's at the end.
// For ASCII we need 1 0's, for UTF-16 2, for UTF-32 4.

View File

@ -20,7 +20,7 @@ public:
//! construct from filename
CFileReadCallBack(const char* filename)
: File(0), Size(0), Close(true)
: File(0), Size(-1), Close(true)
{
// open file
File = fopen(filename, "rb");
@ -31,7 +31,7 @@ public:
//! construct from FILE pointer
CFileReadCallBack(FILE* file)
: File(file), Size(0), Close(false)
: File(file), Size(-1), Close(false)
{
if (File)
getFileSize();
@ -83,63 +83,72 @@ private:
//! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(const char* filename)
{
return new CXMLReaderImpl<char, IXMLBase>(new CFileReadCallBack(filename));
return createIrrXMLReader(new CFileReadCallBack(filename));
}
//! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(FILE* file)
{
return new CXMLReaderImpl<char, IXMLBase>(new CFileReadCallBack(file));
return createIrrXMLReader(new CFileReadCallBack(file));
}
//! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(IFileReadCallBack* callback)
{
return new CXMLReaderImpl<char, IXMLBase>(callback, false);
if (callback && (callback->getSize() >= 0))
return new CXMLReaderImpl<char, IXMLBase>(callback, false);
else
return 0;
}
//! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(const char* filename)
{
return new CXMLReaderImpl<char16, IXMLBase>(new CFileReadCallBack(filename));
return createIrrXMLReaderUTF16(new CFileReadCallBack(filename));
}
//! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(FILE* file)
{
return new CXMLReaderImpl<char16, IXMLBase>(new CFileReadCallBack(file));
return createIrrXMLReaderUTF16(new CFileReadCallBack(file));
}
//! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(IFileReadCallBack* callback)
{
return new CXMLReaderImpl<char16, IXMLBase>(callback, false);
if (callback && (callback->getSize() >= 0))
return new CXMLReaderImpl<char16, IXMLBase>(callback, false);
else
return 0;
}
//! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(const char* filename)
{
return new CXMLReaderImpl<char32, IXMLBase>(new CFileReadCallBack(filename));
return createIrrXMLReaderUTF32(new CFileReadCallBack(filename));
}
//! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(FILE* file)
{
return new CXMLReaderImpl<char32, IXMLBase>(new CFileReadCallBack(file));
return createIrrXMLReaderUTF32(new CFileReadCallBack(file));
}
//! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(IFileReadCallBack* callback)
{
return new CXMLReaderImpl<char32, IXMLBase>(callback, false);
if (callback && (callback->getSize() >= 0))
return new CXMLReaderImpl<char32, IXMLBase>(callback, false);
else
return 0;
}