IrrlichtResourceProvider::loadRawDataContainer fix
Posted: Sun Sep 19, 2010 13:20
IrrlichtResourceProvider now use existFile() method to know whether file exists.
Even if file exists, FileSystem might fail to open file.
if createAndOpenFile() returns 0, application will crash.
This code throws exception if the method returns 0.
if _IRR_WCHAR_FILESYSTEM is defined, Irrlicht is using wchar_t in FileSystem.
So this method should properly convert to wchar_t from UTF-32.
This option is required to use no ASCII character like Japanese character.
I achieved it by irrUString's conversion method.
It assumes wchar_t is Unicode, so it may not be compatible with all platforms.
http://irrlicht.sourceforge.net/phpBB2/ ... 8n&start=0
Even if file exists, FileSystem might fail to open file.
if createAndOpenFile() returns 0, application will crash.
This code throws exception if the method returns 0.
Code: Select all
void IrrlichtResourceProvider::loadRawDataContainer(const String& filename,
RawDataContainer& output,
const String& resourceGroup)
{
String final_filename(getFinalFilename(filename, resourceGroup));
irr::u8* input;
irr::u32 input_size;
irr::io::IReadFile* f = d_fsys.createAndOpenFile(final_filename.c_str());
if (!f)
{
String sMsg("IrrlichtResourceProvider::loadRawDataContainer: "
"Filename supplied for loading must be valid");
sMsg += " [" + final_filename + "]";
CEGUI_THROW(InvalidRequestException(sMsg));
}
input_size = f->getSize();
input = new irr::u8[input_size];
f->read(input, input_size);
f->drop();
output.setData(input);
output.setSize(input_size);
}if _IRR_WCHAR_FILESYSTEM is defined, Irrlicht is using wchar_t in FileSystem.
So this method should properly convert to wchar_t from UTF-32.
This option is required to use no ASCII character like Japanese character.
I achieved it by irrUString's conversion method.
It assumes wchar_t is Unicode, so it may not be compatible with all platforms.
http://irrlicht.sourceforge.net/phpBB2/ ... 8n&start=0
Code: Select all
void IrrlichtResourceProvider::loadRawDataContainer(const String& filename,
RawDataContainer& output,
const String& resourceGroup)
{
String final_filename(getFinalFilename(filename, resourceGroup));
irr::io::path irrFileName;
#ifdef _IRR_WCHAR_FILESYSTEM
irr::core::ustring converter((irr::uchar8_t*)final_filename.c_str());
irrFileName = converter.toWCHAR_s();
#else
irrFileName = final_filename.c_str();
#endif
irr::u8* input;
irr::u32 input_size;
irr::io::IReadFile* f = d_fsys.createAndOpenFile(irrFileName);
if (!f)
{
String sMsg("IrrlichtResourceProvider::loadRawDataContainer: "
"Filename supplied for loading must be valid");
sMsg += " [" + final_filename + "]";
CEGUI_THROW(InvalidRequestException(sMsg));
}
input_size = f->getSize();
input = new irr::u8[input_size];
f->read(input, input_size);
f->drop();
output.setData(input);
output.setSize(input_size);
}