diff options
Diffstat (limited to 'engines/hopkins')
-rw-r--r-- | engines/hopkins/detection.cpp | 9 | ||||
-rw-r--r-- | engines/hopkins/dialogs.cpp | 2 | ||||
-rw-r--r-- | engines/hopkins/saveload.cpp | 19 | ||||
-rw-r--r-- | engines/hopkins/saveload.h | 4 |
4 files changed, 17 insertions, 17 deletions
diff --git a/engines/hopkins/detection.cpp b/engines/hopkins/detection.cpp index 041afecaa8..ebefee6278 100644 --- a/engines/hopkins/detection.cpp +++ b/engines/hopkins/detection.cpp @@ -168,9 +168,6 @@ SaveStateList HopkinsMetaEngine::listSaves(const char *target) const { if (in) { if (Hopkins::SaveLoadManager::readSavegameHeader(in, header)) { saveList.push_back(SaveStateDescriptor(slot, header._saveName)); - - header._thumbnail->free(); - delete header._thumbnail; } delete in; @@ -198,7 +195,11 @@ SaveStateDescriptor HopkinsMetaEngine::querySaveMetaInfos(const char *target, in if (f) { Hopkins::hopkinsSavegameHeader header; - Hopkins::SaveLoadManager::readSavegameHeader(f, header); + if (!Hopkins::SaveLoadManager::readSavegameHeader(f, header, false)) { + delete f; + return SaveStateDescriptor(); + } + delete f; // Create the return descriptor diff --git a/engines/hopkins/dialogs.cpp b/engines/hopkins/dialogs.cpp index fc613f892d..b8f1c73304 100644 --- a/engines/hopkins/dialogs.cpp +++ b/engines/hopkins/dialogs.cpp @@ -692,7 +692,7 @@ void DialogsManager::showSaveLoad(SaveLoadMode mode) { for (int slotNumber = 1; slotNumber <= 6; ++slotNumber) { hopkinsSavegameHeader header; - if (_vm->_saveLoad->readSavegameHeader(slotNumber, header)) { + if (_vm->_saveLoad->readSavegameHeader(slotNumber, header, false)) { Graphics::Surface thumb8; _vm->_saveLoad->convertThumb16To8(header._thumbnail, &thumb8); diff --git a/engines/hopkins/saveload.cpp b/engines/hopkins/saveload.cpp index 05c7fb8119..35a80458ff 100644 --- a/engines/hopkins/saveload.cpp +++ b/engines/hopkins/saveload.cpp @@ -77,9 +77,8 @@ void SaveLoadManager::load(const Common::String &file, byte *buf) { delete savefile; } -bool SaveLoadManager::readSavegameHeader(Common::InSaveFile *in, hopkinsSavegameHeader &header) { +WARN_UNUSED_RESULT bool SaveLoadManager::readSavegameHeader(Common::InSaveFile *in, hopkinsSavegameHeader &header, bool skipThumbnail) { char saveIdentBuffer[SAVEGAME_STR_SIZE + 1]; - header._thumbnail = NULL; // Validate the header Id in->read(saveIdentBuffer, SAVEGAME_STR_SIZE + 1); @@ -96,9 +95,9 @@ bool SaveLoadManager::readSavegameHeader(Common::InSaveFile *in, hopkinsSavegame 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._year = in->readSint16LE(); @@ -186,10 +185,10 @@ Common::Error SaveLoadManager::loadGame(int slot) { // Read in the savegame header hopkinsSavegameHeader header; - readSavegameHeader(savefile, header); - if (header._thumbnail) - header._thumbnail->free(); - delete header._thumbnail; + if (!readSavegameHeader(savefile, header)) { + delete savefile; + return Common::kReadingFailed; + } // Read in the savegame data syncSavegameData(serializer, header._version); @@ -212,14 +211,14 @@ Common::Error SaveLoadManager::loadGame(int slot) { return Common::kNoError; } -bool SaveLoadManager::readSavegameHeader(int slot, hopkinsSavegameHeader &header) { +WARN_UNUSED_RESULT bool SaveLoadManager::readSavegameHeader(int slot, hopkinsSavegameHeader &header, bool skipThumbnail) { // Try and open the save file for reading Common::InSaveFile *savefile = g_system->getSavefileManager()->openForLoading( _vm->generateSaveName(slot)); if (!savefile) return false; - bool result = readSavegameHeader(savefile, header); + bool result = readSavegameHeader(savefile, header, skipThumbnail); delete savefile; return result; } diff --git a/engines/hopkins/saveload.h b/engines/hopkins/saveload.h index 7b4ec307f5..33234f49fa 100644 --- a/engines/hopkins/saveload.h +++ b/engines/hopkins/saveload.h @@ -61,9 +61,9 @@ public: bool saveFile(const Common::String &file, const void *buf, size_t n); void load(const Common::String &file, byte *buf); - static bool readSavegameHeader(Common::InSaveFile *in, hopkinsSavegameHeader &header); + WARN_UNUSED_RESULT static bool readSavegameHeader(Common::InSaveFile *in, hopkinsSavegameHeader &header, bool skipThumbnail = true); void writeSavegameHeader(Common::OutSaveFile *out, hopkinsSavegameHeader &header); - bool readSavegameHeader(int slot, hopkinsSavegameHeader &header); + WARN_UNUSED_RESULT bool readSavegameHeader(int slot, hopkinsSavegameHeader &header, bool skipThumbnail = true); Common::Error saveGame(int slot, const Common::String &saveName); Common::Error loadGame(int slot); |