[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