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

wjpalenstijn at users.sourceforge.net wjpalenstijn at users.sourceforge.net
Fri Feb 27 20:50:25 CET 2009


Revision: 38934
          http://scummvm.svn.sourceforge.net/scummvm/?rev=38934&view=rev
Author:   wjpalenstijn
Date:     2009-02-27 19:50:22 +0000 (Fri, 27 Feb 2009)

Log Message:
-----------
Fix reading corrupted saves.

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

Modified: scummvm/trunk/engines/sci/engine/savegame.cfsml
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cfsml	2009-02-27 19:38:20 UTC (rev 38933)
+++ scummvm/trunk/engines/sci/engine/savegame.cfsml	2009-02-27 19:50:22 UTC (rev 38934)
@@ -1045,9 +1045,16 @@
 	retval->gfx_state = s->gfx_state;
 
 	SavegameMetadata *meta = new SavegameMetadata;
-	memset(meta, 0, sizeof(SavegameMetadata));
 
-	%CFSMLREAD-ATOMIC SavegameMetadata meta FROM fh ERRVAR read_eof;
+	if (read_eof) {
+		// TODO: It would be nice to automate this:
+		meta->savegame_name = NULL;
+		meta->game_version = NULL;
+		return false;
+	}
+
+%CFSMLREAD-ATOMIC SavegameMetadata meta FROM fh ERRVAR read_eof;
+
 	if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
 	    (meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {
 		if (meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION)
@@ -1178,8 +1185,12 @@
 
 	%CFSMLREAD-ATOMIC SavegameMetadata meta FROM stream ERRVAR read_eof;
 
-	if (read_eof)
+	if (read_eof) {
+		// TODO: It would be nice to automate this:
+		meta->savegame_name = NULL;
+		meta->game_version = NULL;
 		return false;
+	}
 
 	if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
 	    (meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-02-27 19:38:20 UTC (rev 38933)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-02-27 19:50:22 UTC (rev 38934)
@@ -5109,8 +5109,14 @@
 	retval->gfx_state = s->gfx_state;
 
 	SavegameMetadata *meta = new SavegameMetadata;
-	memset(meta, 0, sizeof(SavegameMetadata));
 
+	if (read_eof) {
+		// TODO: It would be nice to automate this:
+		meta->savegame_name = NULL;
+		meta->game_version = NULL;
+		return false;
+	}
+
 // Auto-generated CFSML data reader code
 #line 762 "engines/sci/engine/savegame.cfsml"
 	{
@@ -5143,7 +5149,8 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1051 "engines/sci/engine/savegame.cfsml"
+#line 1057 "engines/sci/engine/savegame.cfsml"
+
 	if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
 	    (meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {
 		if (meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION)
@@ -5198,7 +5205,7 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1074 "engines/sci/engine/savegame.cfsml"
+#line 1081 "engines/sci/engine/savegame.cfsml"
 
 	sfx_exit(&s->sound);
 	_gamestate_unfrob(retval);
@@ -5336,10 +5343,14 @@
 		}
 	}
 // End of auto-generated CFSML data reader code
-#line 1180 "engines/sci/engine/savegame.cfsml"
+#line 1187 "engines/sci/engine/savegame.cfsml"
 
-	if (read_eof)
+	if (read_eof) {
+		// TODO: It would be nice to automate this:
+		meta->savegame_name = NULL;
+		meta->game_version = NULL;
 		return false;
+	}
 
 	if ((meta->savegame_version < FREESCI_MINIMUM_SAVEGAME_VERSION) ||
 	    (meta->savegame_version > FREESCI_CURRENT_SAVEGAME_VERSION)) {


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