diff options
| -rw-r--r-- | common/winexe.cpp | 23 | ||||
| -rw-r--r-- | common/winexe.h | 2 | ||||
| -rw-r--r-- | graphics/fonts/winfont.cpp | 24 | 
3 files changed, 30 insertions, 19 deletions
| diff --git a/common/winexe.cpp b/common/winexe.cpp index fd1d565036..ad6ff96505 100644 --- a/common/winexe.cpp +++ b/common/winexe.cpp @@ -24,6 +24,8 @@  #include "common/memstream.h"  #include "common/str.h"  #include "common/winexe.h" +#include "common/winexe_ne.h" +#include "common/winexe_pe.h"  namespace Common { @@ -160,4 +162,25 @@ bool WinResources::loadFromCompressedEXE(const String &fileName) {  	return loadFromEXE(stream);  } + +WinResources *WinResources::createFromEXE(const String &fileName) { +	WinResources *exe; + +	// First try loading via the NE code +	exe = new Common::NEResources(); +	if (exe->loadFromEXE(fileName)) { +		return exe; +	} +	delete exe; + +	// Then try loading via the PE code +	exe = new Common::PEResources(); +	if (exe->loadFromEXE(fileName)) { +		return exe; +	} +	delete exe; + +	return nullptr; +} +  } // End of namespace Common diff --git a/common/winexe.h b/common/winexe.h index cdbc0f6d13..2b81a33261 100644 --- a/common/winexe.h +++ b/common/winexe.h @@ -128,6 +128,8 @@ public:  	virtual SeekableReadStream *getResource(const WinResourceID &type, const WinResourceID &id, const WinResourceID &lang) {  		return getResource(type, id);  	} + +	static WinResources *createFromEXE(const String &fileName);  };  } // End of namespace Common diff --git a/graphics/fonts/winfont.cpp b/graphics/fonts/winfont.cpp index 6494f006b3..ad5b36ec23 100644 --- a/graphics/fonts/winfont.cpp +++ b/graphics/fonts/winfont.cpp @@ -77,27 +77,13 @@ static WinFontDirEntry readDirEntry(Common::SeekableReadStream &stream) {  }  bool WinFont::loadFromFON(const Common::String &fileName, const WinFontDirEntry &dirEntry) { -	Common::WinResources *exe; - -	// First try loading via the NE code -	exe = new Common::NEResources(); -	if (exe->loadFromEXE(fileName)) { -		bool ok = loadFromEXE(exe, fileName, dirEntry); -		delete exe; -		return ok; -	} -	delete exe; +	Common::WinResources *exe = Common::WinResources::createFromEXE(fileName); +	if (!exe) +		return false; -	// Then try loading via the PE code -	exe = new Common::PEResources(); -	if (exe->loadFromEXE(fileName)) { -		bool ok = loadFromEXE(exe, fileName, dirEntry); -		delete exe; -		return ok; -	} +	bool ok = loadFromEXE(exe, fileName, dirEntry);  	delete exe; - -	return false; +	return ok;  }  bool WinFont::loadFromEXE(Common::WinResources *exe, const Common::String &fileName, const WinFontDirEntry &dirEntry) { | 
