diff options
Diffstat (limited to 'engines/tsage')
-rw-r--r-- | engines/tsage/detection.cpp | 9 | ||||
-rw-r--r-- | engines/tsage/saveload.cpp | 15 | ||||
-rw-r--r-- | engines/tsage/saveload.h | 2 |
3 files changed, 13 insertions, 13 deletions
diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index e476391f71..5d31cca75e 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -131,9 +131,6 @@ public: if (in) { if (TsAGE::Saver::readSavegameHeader(in, header)) { saveList.push_back(SaveStateDescriptor(slot, header._saveName)); - - header._thumbnail->free(); - delete header._thumbnail; } delete in; @@ -161,7 +158,11 @@ public: if (f) { TsAGE::tSageSavegameHeader header; - TsAGE::Saver::readSavegameHeader(f, header); + if (!TsAGE::Saver::readSavegameHeader(f, header, false)) { + delete f; + return SaveStateDescriptor(); + } + delete f; // Create the return descriptor diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 03f615db21..81bb973d02 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -189,10 +189,10 @@ Common::Error Saver::restore(int slot) { // Read in the savegame header tSageSavegameHeader header; - readSavegameHeader(saveFile, header); - if (header._thumbnail) - header._thumbnail->free(); - delete header._thumbnail; + if (!readSavegameHeader(saveFile, header)) { + delete saveFile; + return Common::kReadingFailed; + } serializer.setSaveVersion(header._version); @@ -247,9 +247,8 @@ Common::Error Saver::restore(int slot) { const char *SAVEGAME_STR = "SCUMMVM_TSAGE"; #define SAVEGAME_STR_SIZE 13 -bool Saver::readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &header) { +WARN_UNUSED_RESULT bool Saver::readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &header, bool skipThumbnail) { char saveIdentBuffer[SAVEGAME_STR_SIZE + 1]; - header._thumbnail = NULL; // Validate the header Id in->read(saveIdentBuffer, SAVEGAME_STR_SIZE + 1); @@ -266,9 +265,9 @@ bool Saver::readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &head while ((ch = (char)in->readByte()) != '\0') header._saveName += ch; // Get the thumbnail - header._thumbnail = Graphics::loadThumbnail(*in); - if (!header._thumbnail) + if (!Graphics::loadThumbnail(*in, header._thumbnail, skipThumbnail)) { return false; + } // Read in save date/time header._saveYear = in->readSint16LE(); diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 04a1e02b28..3de34489fd 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -221,7 +221,7 @@ public: Common::Error save(int slot, const Common::String &saveName); Common::Error restore(int slot); - static bool readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &header); + WARN_UNUSED_RESULT static bool readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &header, bool skipThumbnail = true); static void writeSavegameHeader(Common::OutSaveFile *out, tSageSavegameHeader &header); void addListener(SaveListener *obj); |