[Scummvm-cvs-logs] SF.net SVN: scummvm: [20872] scummvm/trunk/engines/saga

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sat Feb 25 03:14:01 CET 2006


Revision: 20872
Author:   fingolfin
Date:     2006-02-25 03:12:44 -0800 (Sat, 25 Feb 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm?rev=20872&view=rev

Log Message:
-----------
Removed last two uses of MKID

Modified Paths:
--------------
    scummvm/trunk/engines/saga/saveload.cpp
    scummvm/trunk/engines/scumm/saveload.cpp
Modified: scummvm/trunk/engines/saga/saveload.cpp
===================================================================
--- scummvm/trunk/engines/saga/saveload.cpp	2006-02-25 10:41:45 UTC (rev 20871)
+++ scummvm/trunk/engines/saga/saveload.cpp	2006-02-25 11:12:44 UTC (rev 20872)
@@ -135,9 +135,12 @@
 		if (_saveMarks[i]) {
 			name = calcSaveFileName(i);
 			if ((in = _saveFileMan->openForLoading(name)) != NULL) {
-				in->read(&_saveHeader, sizeof(_saveHeader));
+				_saveHeader.type = in->readUint32BE();
+				_saveHeader.size = in->readUint32LE();
+				_saveHeader.version = in->readUint32LE();
+				in->read(_saveHeader.name, sizeof(_saveHeader.name));
 
-				if (_saveHeader.type != MKID('SAGA')) {
+				if (_saveHeader.type != MKID_BE('SAGA')) {
 					error("SagaEngine::load wrong format");
 				}
 				strcpy(_saveFiles[_saveFilesCount].name, _saveHeader.name);
@@ -168,13 +171,18 @@
 		return;
 	}
 
-	_saveHeader.type = MKID('SAGA');
+	_saveHeader.type = MKID_BE('SAGA');
 	_saveHeader.size = 0;
-	_saveHeader.version = TO_LE_32(CURRENT_SAGA_VER);
+	_saveHeader.version = CURRENT_SAGA_VER;
 	strncpy(_saveHeader.name, saveName, SAVE_TITLE_SIZE);
 
 	out->write(&_saveHeader, sizeof(_saveHeader));
 
+	out->writeUint32BE(_saveHeader.type);
+	out->writeUint32LE(_saveHeader.size);
+	out->writeUint32LE(_saveHeader.version);
+	out->write(_saveHeader.name, sizeof(_saveHeader.name));
+
 	// Original game title
 	memset(title, 0, TITLESIZE);
 	strncpy(title, getGameDescription()->title, TITLESIZE);
@@ -221,18 +229,17 @@
 		return;
 	}
 
-	in->read(&_saveHeader, sizeof(_saveHeader));
+	_saveHeader.type = in->readUint32BE();
+	_saveHeader.size = in->readUint32LE();
+	_saveHeader.version = in->readUint32LE();
+	in->read(_saveHeader.name, sizeof(_saveHeader.name));
 
-	_saveHeader.size = FROM_LE_32(_saveHeader.size);
-	_saveHeader.version = FROM_LE_32(_saveHeader.version);
-
-	// This save was written in native endianness (fix that, so warning will show up)
-	if (_saveHeader.version > CURRENT_SAGA_VER) {
-#ifdef SCUMM_LITTLE_ENDIAN
-		_saveHeader.version = TO_BE_32(_saveHeader.version);
-#else
-		_saveHeader.version = TO_LE_32(_saveHeader.version);
-#endif
+	// Some older saves were not written in an endian safe fashion.
+	// We try to detect this here by checking for extremly high version values.
+	// If found, we retry with the data swapped.
+	// FIXME: Maybe display a warning/error message instead?
+	if (_saveHeader.version > 0xFFFFFF) {
+		_saveHeader.version = SWAP_BYTES_32(_saveHeader.version);
 	}
 
 	debug(2, "Save version: %x", _saveHeader.version);
@@ -240,7 +247,7 @@
 	if (_saveHeader.version < 4)
 		warning("This savegame is not endian-safe. There may be problems");
 
-	if (_saveHeader.type != MKID('SAGA')) {
+	if (_saveHeader.type != MKID_BE('SAGA')) {
 		error("SagaEngine::load wrong format");
 	}
 

Modified: scummvm/trunk/engines/scumm/saveload.cpp
===================================================================
--- scummvm/trunk/engines/scumm/saveload.cpp	2006-02-25 10:41:45 UTC (rev 20871)
+++ scummvm/trunk/engines/scumm/saveload.cpp	2006-02-25 11:12:44 UTC (rev 20872)
@@ -102,11 +102,14 @@
 
 	memcpy(hdr.name, _saveLoadName, sizeof(hdr.name));
 
-	hdr.type = MKID('SCVM');
+	hdr.type = MKID_BE('SCVM');
 	hdr.size = 0;
-	hdr.ver = TO_LE_32(CURRENT_VER);
+	hdr.ver = CURRENT_VER;
 
-	out->write(&hdr, sizeof(hdr));
+	out->writeUint32BE(hdr.type);
+	out->writeUint32LE(hdr.size);
+	out->writeUint32LE(hdr.ver);
+	out->write(hdr.name, sizeof(hdr.name));
 	saveThumbnail(out);
 	saveInfos(out);
 
@@ -123,6 +126,14 @@
 	return true;
 }
 
+static bool loadSaveGameHeader(Common::InSaveFile *in, SaveGameHeader &hdr) {
+	hdr.type = in->readUint32BE();
+	hdr.size = in->readUint32LE();
+	hdr.ver = in->readUint32LE();
+	in->read(hdr.name, sizeof(hdr.name));
+	return !in->ioFailed() && hdr.type == MKID_BE('SCVM');
+}
+
 bool ScummEngine::loadState(int slot, bool compat) {
 	char filename[256];
 	Common::InSaveFile *in;
@@ -134,16 +145,16 @@
 	if (!(in = _saveFileMan->openForLoading(filename)))
 		return false;
 
-	in->read(&hdr, sizeof(hdr));
-	if (hdr.type != MKID('SCVM')) {
+	if (!loadSaveGameHeader(in, hdr)) {
 		warning("Invalid savegame '%s'", filename);
 		delete in;
 		return false;
 	}
 
 	// In older versions of ScummVM, the header version was not endian safe.
-	// We account for that by retrying once with swapped byte order.
-	if (hdr.ver > CURRENT_VER)
+	// We account for that by retrying once with swapped byte order in case
+	// we see a version that is higher than anything we'd expect...
+	if (hdr.ver > 0xFFFFFF)
 		hdr.ver = SWAP_BYTES_32(hdr.ver);
 		
 	// Reject save games which are too old or too new. Note that
@@ -432,20 +443,19 @@
 	char filename[256];
 	Common::InSaveFile *in;
 	SaveGameHeader hdr;
-	int len;
 
 	makeSavegameName(filename, slot, false);
 	if (!(in = _saveFileMan->openForLoading(filename))) {
 		strcpy(desc, "");
 		return false;
 	}
-	len = in->read(&hdr, sizeof(hdr));
-	delete in;
 
-	if (len != sizeof(hdr) || hdr.type != MKID('SCVM')) {
+	if (!loadSaveGameHeader(in, hdr)) {
+		delete in;
 		strcpy(desc, "Invalid savegame");
 		return false;
 	}
+	delete in;
 
 	if (hdr.ver > CURRENT_VER)
 		hdr.ver = TO_LE_32(hdr.ver);
@@ -469,15 +479,13 @@
 	char filename[256];
 	Common::InSaveFile *in;
 	SaveGameHeader hdr;
-	int len;
 
 	makeSavegameName(filename, slot, false);
 	if (!(in = _saveFileMan->openForLoading(filename))) {
 		return 0;
 	}
-	len = in->read(&hdr, sizeof(hdr));
 
-	if (len != sizeof(hdr) || hdr.type != MKID('SCVM')) {
+	if (!loadSaveGameHeader(in, hdr)) {
 		delete in;
 		return 0;
 	}
@@ -499,15 +507,13 @@
 	char filename[256];
 	Common::InSaveFile *in;
 	SaveGameHeader hdr;
-	int len;
 
 	makeSavegameName(filename, slot, false);
 	if (!(in = _saveFileMan->openForLoading(filename))) {
 		return false;
 	}
-	len = in->read(&hdr, sizeof(hdr));
 
-	if (len != sizeof(hdr) || hdr.type != MKID('SCVM')) {
+	if (!loadSaveGameHeader(in, hdr)) {
 		delete in;
 		return false;
 	}







More information about the Scummvm-git-logs mailing list