Commit aca761b6 authored by hybrid's avatar hybrid

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
parent 45f581d7
Changes in version 1.5 (... 2008) 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 - 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. - 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.
......
...@@ -550,7 +550,9 @@ private: ...@@ -550,7 +550,9 @@ private:
//! reads the xml file and converts it into the wanted character format. //! reads the xml file and converts it into the wanted character format.
bool readFile(IFileReadCallBack* callback) 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. 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. // For ASCII we need 1 0's, for UTF-16 2, for UTF-32 4.
......
...@@ -20,7 +20,7 @@ public: ...@@ -20,7 +20,7 @@ public:
//! construct from filename //! construct from filename
CFileReadCallBack(const char* filename) CFileReadCallBack(const char* filename)
: File(0), Size(0), Close(true) : File(0), Size(-1), Close(true)
{ {
// open file // open file
File = fopen(filename, "rb"); File = fopen(filename, "rb");
...@@ -31,7 +31,7 @@ public: ...@@ -31,7 +31,7 @@ public:
//! construct from FILE pointer //! construct from FILE pointer
CFileReadCallBack(FILE* file) CFileReadCallBack(FILE* file)
: File(file), Size(0), Close(false) : File(file), Size(-1), Close(false)
{ {
if (File) if (File)
getFileSize(); getFileSize();
...@@ -83,63 +83,72 @@ private: ...@@ -83,63 +83,72 @@ private:
//! Creates an instance of an UFT-8 or ASCII character xml parser. //! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(const char* filename) 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. //! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(FILE* file) 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. //! Creates an instance of an UFT-8 or ASCII character xml parser.
IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(IFileReadCallBack* callback) 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. //! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(const char* filename) 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. //! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(FILE* file) 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. //! Creates an instance of an UTF-16 xml parser.
IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(IFileReadCallBack* callback) 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. //! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(const char* filename) 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. //! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(FILE* file) 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. //! Creates an instance of an UTF-32 xml parser.
IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(IFileReadCallBack* callback) 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;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment