[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