IrrlichtResourceProvider::loadRawDataContainer fix

If you found a bug in our library or on our website, please report it in this section. In this forum you can also make concrete suggestions or feature requests.

Moderators: CEGUI MVP, CEGUI Team

vroad
Just popping in
Just popping in
Posts: 6
Joined: Sun Sep 12, 2010 12:27

IrrlichtResourceProvider::loadRawDataContainer fix

Postby vroad » 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.

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);
}

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Re: IrrlichtResourceProvider::loadRawDataContainer fix

Postby CrazyEddie » Tue Sep 21, 2010 09:32

Sorry to always be a moaning git, but please read this: http://www.cegui.org.uk/docs/current/devel.html

Basically, you need to provide any modifications in unified diff format, otherwise I'm not going to bother even looking ;)

Thanks,

CE.

vroad
Just popping in
Just popping in
Posts: 6
Joined: Sun Sep 12, 2010 12:27

Re: IrrlichtResourceProvider::loadRawDataContainer fix

Postby vroad » Tue Sep 21, 2010 14:11

Basically, you need to provide any modifications in unified diff format, otherwise I'm not going to bother even looking

I don't know that, sorry.
I created path using TortoiseSVN and posted(only first one). Is this OK?

http://www.cegui.org.uk/mantis/view.php?id=395

User avatar
CrazyEddie
CEGUI Project Lead
Posts: 6760
Joined: Wed Jan 12, 2005 12:06
Location: England
Contact:

Re: IrrlichtResourceProvider::loadRawDataContainer fix

Postby CrazyEddie » Wed Sep 22, 2010 08:53

Yeah, this looks more like it, thanks :)

CE


Return to “Bug Reports, Suggestions, Feature Requests”

Who is online

Users browsing this forum: No registered users and 8 guests