aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorJohannes Schickel2013-11-27 19:01:30 +0100
committerJohannes Schickel2013-11-27 19:01:30 +0100
commitd8d6faff019b681c80f5e22a0e4266ecfa78f55c (patch)
tree318c35333b8016da38f95838a9aadcd379a5248e /engines/scumm
parentf4cb2d35d403fb160bcbf846762a36e8be5c7115 (diff)
downloadscummvm-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.cpp42
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;