[Scummvm-cvs-logs] scummvm master -> 9bb978486b102dc751922c6d5f4e729e264c2887
dreammaster
dreammaster at scummvm.org
Sat Oct 1 09:57:02 CEST 2011
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
9bb978486b COMMON: Fix multiple engines asserting in querySaveMetaInfos for empty save slots
Commit: 9bb978486b102dc751922c6d5f4e729e264c2887
https://github.com/scummvm/scummvm/commit/9bb978486b102dc751922c6d5f4e729e264c2887
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-10-01T00:50:19-07:00
Commit Message:
COMMON: Fix multiple engines asserting in querySaveMetaInfos for empty save slots
Changed paths:
engines/cge/detection.cpp
engines/cruise/detection.cpp
engines/draci/detection.cpp
engines/tsage/detection.cpp
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp
index abb0cf5..8b90bd1 100644
--- a/engines/cge/detection.cpp
+++ b/engines/cge/detection.cpp
@@ -189,38 +189,41 @@ SaveStateList CGEMetaEngine::listSaves(const char *target) const {
SaveStateDescriptor CGEMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
Common::String fileName = Common::String::format("%s.%03d", target, slot);
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(fileName);
- assert(f);
-
- CGE::SavegameHeader header;
-
- // Check to see if it's a ScummVM savegame or not
- char buffer[kSavegameStrSize + 1];
- f->read(buffer, kSavegameStrSize + 1);
-
- bool hasHeader = !strncmp(buffer, CGE::savegameStr, kSavegameStrSize + 1) &&
- CGE::CGEEngine::readSavegameHeader(f, header);
- delete f;
-
- if (!hasHeader) {
- // Original savegame perhaps?
- SaveStateDescriptor desc(slot, "Unknown");
- return desc;
- } else {
- // Create the return descriptor
- SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
- desc.setThumbnail(header.thumbnail);
- desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
- desc.setSaveTime(header.saveHour, header.saveMinutes);
-
- // Slot 0 is used for the 'automatic save on exit' save in Soltys, thus
- // we prevent it from being deleted or overwritten by accident.
- desc.setDeletableFlag(slot != 0);
- desc.setWriteProtectedFlag(slot == 0);
-
- return desc;
+
+ if (f) {
+ CGE::SavegameHeader header;
+
+ // Check to see if it's a ScummVM savegame or not
+ char buffer[kSavegameStrSize + 1];
+ f->read(buffer, kSavegameStrSize + 1);
+
+ bool hasHeader = !strncmp(buffer, CGE::savegameStr, kSavegameStrSize + 1) &&
+ CGE::CGEEngine::readSavegameHeader(f, header);
+ delete f;
+
+ if (!hasHeader) {
+ // Original savegame perhaps?
+ SaveStateDescriptor desc(slot, "Unknown");
+ return desc;
+ } else {
+ // Create the return descriptor
+ SaveStateDescriptor desc(slot, header.saveName);
+ desc.setDeletableFlag(true);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+ desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
+ desc.setSaveTime(header.saveHour, header.saveMinutes);
+
+ // Slot 0 is used for the 'automatic save on exit' save in Soltys, thus
+ // we prevent it from being deleted or overwritten by accident.
+ desc.setDeletableFlag(slot != 0);
+ desc.setWriteProtectedFlag(slot == 0);
+
+ return desc;
+ }
}
+
+ return SaveStateDescriptor();
}
bool CGEMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp
index 5be2fde..a68b14d 100644
--- a/engines/cruise/detection.cpp
+++ b/engines/cruise/detection.cpp
@@ -284,19 +284,22 @@ void CruiseMetaEngine::removeSaveState(const char *target, int slot) const {
SaveStateDescriptor CruiseMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(
Cruise::CruiseEngine::getSavegameFile(slot));
- assert(f);
-
- Cruise::CruiseSavegameHeader header;
- Cruise::readSavegameHeader(f, header);
- delete f;
-
- // Create the return descriptor
- SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
- desc.setThumbnail(header.thumbnail);
+
+ if (f) {
+ Cruise::CruiseSavegameHeader header;
+ Cruise::readSavegameHeader(f, header);
+ delete f;
+
+ // Create the return descriptor
+ SaveStateDescriptor desc(slot, header.saveName);
+ desc.setDeletableFlag(true);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+
+ return desc;
+ }
- return desc;
+ return SaveStateDescriptor();
}
bool CruiseMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
diff --git a/engines/draci/detection.cpp b/engines/draci/detection.cpp
index b7e83e1..e7fbaf6 100644
--- a/engines/draci/detection.cpp
+++ b/engines/draci/detection.cpp
@@ -155,30 +155,33 @@ void DraciMetaEngine::removeSaveState(const char *target, int slot) const {
SaveStateDescriptor DraciMetaEngine::querySaveMetaInfos(const char *target, int slot) const {
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(
Draci::DraciEngine::getSavegameFile(slot));
- assert(f);
-
- Draci::DraciSavegameHeader header;
- Draci::readSavegameHeader(f, header);
- delete f;
-
- // Create the return descriptor
- SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
- desc.setThumbnail(header.thumbnail);
-
- int day = (header.date >> 24) & 0xFF;
- int month = (header.date >> 16) & 0xFF;
- int year = header.date & 0xFFFF;
- desc.setSaveDate(year, month, day);
-
- int hour = (header.time >> 8) & 0xFF;
- int minutes = header.time & 0xFF;
- desc.setSaveTime(hour, minutes);
-
- desc.setPlayTime(header.playtime * 1000);
+
+ if (f) {
+ Draci::DraciSavegameHeader header;
+ Draci::readSavegameHeader(f, header);
+ delete f;
+
+ // Create the return descriptor
+ SaveStateDescriptor desc(slot, header.saveName);
+ desc.setDeletableFlag(true);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+
+ int day = (header.date >> 24) & 0xFF;
+ int month = (header.date >> 16) & 0xFF;
+ int year = header.date & 0xFFFF;
+ desc.setSaveDate(year, month, day);
+
+ int hour = (header.time >> 8) & 0xFF;
+ int minutes = header.time & 0xFF;
+ desc.setSaveTime(hour, minutes);
+
+ desc.setPlayTime(header.playtime * 1000);
+
+ return desc;
+ }
- return desc;
+ return SaveStateDescriptor();
}
bool DraciMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp
index 8a4b834..3395205 100644
--- a/engines/tsage/detection.cpp
+++ b/engines/tsage/detection.cpp
@@ -156,22 +156,25 @@ public:
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const {
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(
generateGameStateFileName(target, slot));
- assert(f);
+
+ if (f) {
+ TsAGE::tSageSavegameHeader header;
+ TsAGE::Saver::readSavegameHeader(f, header);
+ delete f;
+
+ // Create the return descriptor
+ SaveStateDescriptor desc(slot, header.saveName);
+ desc.setDeletableFlag(true);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+ desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
+ desc.setSaveTime(header.saveHour, header.saveMinutes);
+ desc.setPlayTime(header.totalFrames * GAME_FRAME_TIME);
+
+ return desc;
+ }
- TsAGE::tSageSavegameHeader header;
- TsAGE::Saver::readSavegameHeader(f, header);
- delete f;
-
- // Create the return descriptor
- SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
- desc.setThumbnail(header.thumbnail);
- desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
- desc.setSaveTime(header.saveHour, header.saveMinutes);
- desc.setPlayTime(header.totalFrames * GAME_FRAME_TIME);
-
- return desc;
+ return SaveStateDescriptor();
}
};
More information about the Scummvm-git-logs
mailing list