diff options
author | Johannes Schickel | 2013-11-27 19:01:30 +0100 |
---|---|---|
committer | Johannes Schickel | 2013-11-27 19:01:30 +0100 |
commit | d8d6faff019b681c80f5e22a0e4266ecfa78f55c (patch) | |
tree | 318c35333b8016da38f95838a9aadcd379a5248e /engines/scumm | |
parent | f4cb2d35d403fb160bcbf846762a36e8be5c7115 (diff) | |
download | scummvm-rg350-d8d6faff019b681c80f5e22a0e4266ecfa78f55c.tar.gz scummvm-rg350-d8d6faff019b681c80f5e22a0e4266ecfa78f55c.tar.bz2 scummvm-rg350-d8d6faff019b681c80f5e22a0e4266ecfa78f55c.zip |
SCUMM: Slight cleanup in savegame code.
Diffstat (limited to 'engines/scumm')
-rw-r--r-- | engines/scumm/saveload.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
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; |