GRAPHICS: Allocate Common::PEResources on the heap in WinFont::loadFromPE()

This commit is contained in:
Julien 2011-06-05 04:10:39 +08:00 committed by Julien
parent 3ece07b14b
commit 7a882600c6

View file

@ -120,15 +120,18 @@ bool WinFont::loadFromNE(const Common::String &fileName, const WinFontDirEntry &
}
bool WinFont::loadFromPE(const Common::String &fileName, const WinFontDirEntry &dirEntry) {
Common::PEResources exe;
Common::PEResources *exe = new Common::PEResources();
if (!exe.loadFromEXE(fileName))
if (!exe->loadFromEXE(fileName)) {
delete exe;
return false;
}
// Let's pull out the font directory
Common::SeekableReadStream *fontDirectory = exe.getResource(Common::kPEFontDir, Common::String("FONTDIR"));
Common::SeekableReadStream *fontDirectory = exe->getResource(Common::kPEFontDir, Common::String("FONTDIR"));
if (!fontDirectory) {
warning("No font directory in '%s'", fileName.c_str());
delete exe;
return false;
}
@ -139,18 +142,21 @@ bool WinFont::loadFromPE(const Common::String &fileName, const WinFontDirEntry &
// Couldn't match the face name
if (fontId == 0xffffffff) {
warning("Could not find face '%s' in '%s'", dirEntry.faceName.c_str(), fileName.c_str());
delete exe;
return false;
}
// Actually go get our font now...
Common::SeekableReadStream *fontStream = exe.getResource(Common::kPEFont, fontId);
Common::SeekableReadStream *fontStream = exe->getResource(Common::kPEFont, fontId);
if (!fontStream) {
warning("Could not find font %d in %s", fontId, fileName.c_str());
delete exe;
return false;
}
bool ok = loadFromFNT(*fontStream);
delete fontStream;
delete exe;
return ok;
}