From 4269c3a4ea04909edec47669b42b10a9449fe250 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 1 Jun 2009 03:27:54 +0000 Subject: Converted the saving of perso structure data to proper endian-safe serialisation svn-id: r41093 --- engines/cruise/saveload.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'engines/cruise/saveload.cpp') diff --git a/engines/cruise/saveload.cpp b/engines/cruise/saveload.cpp index ed7b2a90c3..4230829bcf 100644 --- a/engines/cruise/saveload.cpp +++ b/engines/cruise/saveload.cpp @@ -555,6 +555,27 @@ static void syncSongs(Common::Serializer &s) { } } +static void syncPerso(Common::Serializer &s, persoStruct &p) { + s.syncAsSint16LE(p.inc_droite); + s.syncAsSint16LE(p.inc_droite0); + s.syncAsSint16LE(p.inc_chemin); + + for (int i = 0; i < 400; ++i) { + s.syncAsSint16LE(p.coordinates[i].x); + s.syncAsSint16LE(p.coordinates[i].y); + } + + for (int i = 0; i < NUM_NODES + 3; ++i) { + s.syncAsSint16LE(p.solution[i][0]); + s.syncAsSint16LE(p.solution[i][1]); + } + + s.syncAsSint16LE(p.inc_jo1); + s.syncAsSint16LE(p.inc_jo2); + s.syncAsSint16LE(p.dir_perso); + s.syncAsSint16LE(p.inc_jo0); +} + static void syncCT(Common::Serializer &s) { int v = (polyStruct) ? 1 : 0; s.syncAsSint32LE(v); @@ -583,12 +604,8 @@ static void syncCT(Common::Serializer &s) { // Set up the pointer for the next structure persoTable[i] = (v == 0) ? NULL : (persoStruct *)mallocAndZero(sizeof(persoStruct)); - if (v != 0) { - // FIXME: This code is not endian safe, and breaks if struct - // packing changes. Read/write the members one by one instead. - assert(sizeof(persoStruct) == 0x6AA); - s.syncBytes((byte *)persoTable[i], 0x6AA); - } + if (v != 0) + syncPerso(s, *persoTable[i]); } } -- cgit v1.2.3