[Scummvm-cvs-logs] SF.net SVN: scummvm:[49424] scummvm/trunk/engines/sci/engine/kfile.cpp

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Fri Jun 4 12:36:50 CEST 2010


Revision: 49424
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49424&view=rev
Author:   waltervn
Date:     2010-06-04 10:36:49 +0000 (Fri, 04 Jun 2010)

Log Message:
-----------
SCI: Add savegame version check in CheckSaveGame

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kfile.cpp

Modified: scummvm/trunk/engines/sci/engine/kfile.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kfile.cpp	2010-06-04 10:15:13 UTC (rev 49423)
+++ scummvm/trunk/engines/sci/engine/kfile.cpp	2010-06-04 10:36:49 UTC (rev 49424)
@@ -44,6 +44,7 @@
 	int id;
 	int date;
 	int time;
+	int version;
 	char name[SCI_MAX_SAVENAME_LENGTH];
 };
 
@@ -276,6 +277,7 @@
 			// We need to fix date in here, because we save DDMMYYYY instead of YYYYMMDD, so sorting wouldnt work
 			desc.date = ((desc.date & 0xFFFF) << 16) | ((desc.date & 0xFF0000) >> 8) | ((desc.date & 0xFF000000) >> 24);
 			desc.time = meta.savegame_time;
+			desc.version = meta.savegame_version;
 
 			if (meta.savegame_name.lastChar() == '\n')
 				meta.savegame_name.deleteLastChar();
@@ -444,7 +446,17 @@
 	Common::Array<SavegameDesc> saves;
 	listSavegames(saves);
 
-	return make_reg(0, savedir_nr < saves.size());
+	// Check for savegame slot being out of range
+	if (savedir_nr >= saves.size())
+		return NULL_REG;
+
+	// Check for compatible savegame version
+	int ver = saves[savedir_nr].version;
+	if (ver < MINIMUM_SAVEGAME_VERSION || ver > CURRENT_SAVEGAME_VERSION)
+		return NULL_REG;
+
+	// Otherwise we assume the savegame is OK
+	return make_reg(0, 1);
 }
 
 reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv) {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list