aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm
diff options
context:
space:
mode:
authorJohannes Schickel2013-11-27 19:29:21 +0100
committerJohannes Schickel2013-11-27 19:29:21 +0100
commitfdcb6a6b1ae524b106a7da3bda9e0afcdf7313da (patch)
treeb77b4cfd47567ac1e64a7a2acfbcff5bc8e3426d /engines/scumm
parent3318c4e4ac04055a2d5aaf3683fd66f50b0fc5a2 (diff)
downloadscummvm-rg350-fdcb6a6b1ae524b106a7da3bda9e0afcdf7313da.tar.gz
scummvm-rg350-fdcb6a6b1ae524b106a7da3bda9e0afcdf7313da.tar.bz2
scummvm-rg350-fdcb6a6b1ae524b106a7da3bda9e0afcdf7313da.zip
SCUMM: Cleanup querySaveMetaInfos implementation.
This results in less code and also less I/O operations (including seeking).
Diffstat (limited to 'engines/scumm')
-rw-r--r--engines/scumm/detection.cpp22
-rw-r--r--engines/scumm/saveload.cpp71
-rw-r--r--engines/scumm/scumm.h4
3 files changed, 29 insertions, 68 deletions
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index d2fd00762b..aa7e60930a 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -1262,25 +1262,21 @@ void ScummMetaEngine::removeSaveState(const char *target, int slot) const {
}
SaveStateDescriptor ScummMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
- Common::String filename = ScummEngine::makeSavegameName(target, slot, false);
- Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(filename);
-
- if (!in)
- return SaveStateDescriptor();
-
Common::String saveDesc;
- Scumm::getSavegameName(in, saveDesc, 0); // FIXME: heversion?!?
- delete in;
+ Graphics::Surface *thumbnail = nullptr;
+ SaveStateMetaInfos infos;
+ memset(&infos, 0, sizeof(infos));
+ SaveStateMetaInfos *infoPtr = &infos;
- // TODO: Cleanup
- Graphics::Surface *thumbnail = ScummEngine::loadThumbnailFromSlot(target, slot);
+ // FIXME: heversion?!?
+ if (!ScummEngine::querySaveMetaInfos(target, slot, 0, saveDesc, thumbnail, infoPtr)) {
+ return SaveStateDescriptor();
+ }
SaveStateDescriptor desc(slot, saveDesc);
desc.setThumbnail(thumbnail);
- SaveStateMetaInfos infos;
- memset(&infos, 0, sizeof(infos));
- if (ScummEngine::loadInfosFromSlot(target, slot, &infos)) {
+ if (infoPtr) {
int day = (infos.date >> 24) & 0xFF;
int month = (infos.date >> 16) & 0xFF;
int year = infos.date & 0xFFFF;
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index f9d4456c14..3feab2e62f 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -678,72 +678,39 @@ bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion
return true;
}
-Graphics::Surface *ScummEngine::loadThumbnailFromSlot(const char *target, int slot) {
- Common::SeekableReadStream *in;
- SaveGameHeader hdr;
-
- if (slot < 0)
- return 0;
-
- Common::String filename = ScummEngine::makeSavegameName(target, slot, false);
- if (!(in = g_system->getSavefileManager()->openForLoading(filename))) {
- return 0;
- }
-
- // FIXME: HE version?
- if (!loadAndCheckSaveGameHeader(in, 0, hdr)) {
- delete in;
- return 0;
- }
-
- if (hdr.ver < VER(52)) {
- delete in;
- return 0;
- }
-
- Graphics::Surface *thumb = 0;
- if (Graphics::checkThumbnailHeader(*in)) {
- thumb = Graphics::loadThumbnail(*in);
+bool ScummEngine::querySaveMetaInfos(const char *target, int slot, int heversion, Common::String &desc, Graphics::Surface *&thumbnail, SaveStateMetaInfos *&timeInfos) {
+ if (slot < 0) {
+ return false;
}
- delete in;
- return thumb;
-}
-
-bool ScummEngine::loadInfosFromSlot(const char *target, int slot, SaveStateMetaInfos *stuff) {
- Common::SeekableReadStream *in;
SaveGameHeader hdr;
+ const Common::String filename = ScummEngine::makeSavegameName(target, slot, false);
+ Common::ScopedPtr<Common::SeekableReadStream> in(g_system->getSavefileManager()->openForLoading(filename));
- if (slot < 0)
- return 0;
-
- Common::String filename = makeSavegameName(target, slot, false);
- if (!(in = g_system->getSavefileManager()->openForLoading(filename))) {
+ if (!in) {
return false;
}
- // FIXME: HE version?
- if (!loadAndCheckSaveGameHeader(in, 0, hdr)) {
- delete in;
+ if (!loadAndCheckSaveGameHeader(in.get(), heversion, hdr)) {
return false;
}
- if (hdr.ver < VER(56)) {
- delete in;
- return false;
- }
+ desc = hdr.name;
- if (!Graphics::skipThumbnail(*in)) {
- delete in;
- return false;
- }
+ if (hdr.ver > VER(52)) {
+ if (Graphics::checkThumbnailHeader(*in)) {
+ thumbnail = Graphics::loadThumbnail(*in);
+ }
- if (!loadInfos(in, stuff)) {
- delete in;
- return false;
+ if (hdr.ver > VER(57)) {
+ if (!loadInfos(in.get(), timeInfos)) {
+ return false;
+ }
+ } else {
+ timeInfos = nullptr;
+ }
}
- delete in;
return true;
}
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 0b0c14a59a..942e8a6b69 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -620,9 +620,7 @@ public:
// thumbnail + info stuff
public:
- static Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot);
-
- static bool loadInfosFromSlot(const char *target, int slot, SaveStateMetaInfos *stuff);
+ static bool querySaveMetaInfos(const char *target, int slot, int heversion, Common::String &desc, Graphics::Surface *&thumbnail, SaveStateMetaInfos *&timeInfos);
protected:
void saveInfos(Common::WriteStream* file);