From d8d6faff019b681c80f5e22a0e4266ecfa78f55c Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Wed, 27 Nov 2013 19:01:30 +0100 Subject: SCUMM: Slight cleanup in savegame code. --- engines/scumm/saveload.cpp | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'engines') diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index 8170a032d9..f9d4456c14 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -634,28 +634,46 @@ bool ScummEngine::getSavegameName(int slot, Common::String &desc) { return result; } -bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion) { - SaveGameHeader hdr; - +namespace { +bool loadAndCheckSaveGameHeader(Common::InSaveFile *in, int heversion, SaveGameHeader &hdr, Common::String *error = nullptr) { if (!loadSaveGameHeader(in, hdr)) { - desc = "Invalid savegame"; + if (error) { + *error = "Invalid savegame"; + } return false; } - if (hdr.ver > CURRENT_VER) + if (hdr.ver > CURRENT_VER) { hdr.ver = TO_LE_32(hdr.ver); + } + if (hdr.ver < VER(7) || hdr.ver > CURRENT_VER) { - desc = "Invalid version"; + if (error) { + *error = "Invalid version"; + } return false; } // We (deliberately) broke HE savegame compatibility at some point. if (hdr.ver < VER(57) && heversion >= 60) { - desc = "Unsupported version"; + if (error) { + *error = "Unsupported version"; + } return false; } hdr.name[sizeof(hdr.name) - 1] = 0; + return true; +} +} // End of anonymous namespace + +bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion) { + SaveGameHeader hdr; + + if (!loadAndCheckSaveGameHeader(in, heversion, hdr, &desc)) { + return false; + } + desc = hdr.name; return true; } @@ -672,13 +690,12 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(const char *target, int sl return 0; } - if (!loadSaveGameHeader(in, hdr)) { + // FIXME: HE version? + if (!loadAndCheckSaveGameHeader(in, 0, hdr)) { delete in; return 0; } - if (hdr.ver > CURRENT_VER) - hdr.ver = TO_LE_32(hdr.ver); if (hdr.ver < VER(52)) { delete in; return 0; @@ -705,13 +722,12 @@ bool ScummEngine::loadInfosFromSlot(const char *target, int slot, SaveStateMetaI return false; } - if (!loadSaveGameHeader(in, hdr)) { + // FIXME: HE version? + if (!loadAndCheckSaveGameHeader(in, 0, hdr)) { delete in; return false; } - if (hdr.ver > CURRENT_VER) - hdr.ver = TO_LE_32(hdr.ver); if (hdr.ver < VER(56)) { delete in; return false; -- cgit v1.2.3