From 5dcfd1e32c185e88b09a3ff1341aaf78b674572b Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 19 Apr 2011 21:02:27 +1000 Subject: TSAGE: Reworked the saving code to fix crashes Note that this undoes the recent compilation fix for GCC, since it didn't work. For now, used an explicit void ** conversion as previously suggested. --- engines/tsage/saveload.cpp | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'engines/tsage/saveload.cpp') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 594d30fa3c..73c9d02cb5 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -151,13 +151,13 @@ Common::Error Saver::save(int slot, const Common::String &saveName) { } Common::Error Saver::restore(int slot) { - assert(!getMacroSaveFlag()); + assert(!getMacroRestoreFlag()); // Signal any objects registered for notification _loadNotifiers.notify(false); // Set fields - _macroSaveFlag = true; + _macroRestoreFlag = true; _saveSlot = slot; _unresolvedPtrs.clear(); @@ -335,7 +335,7 @@ bool Saver::savegamesExist() const { */ int Saver::blockIndexOf(SavedObject *p) { int objIndex = 1; - SynchronisedList::iterator iObj; + Common::List::iterator iObj; for (iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { SavedObject *iObjP = *iObj; @@ -346,6 +346,30 @@ int Saver::blockIndexOf(SavedObject *p) { return 0; } +/** + * Returns the number of objects in the object list registry + */ +int Saver::getObjectCount() const { + int count = 0; + Common::List::const_iterator i; + + for (i = _objList.begin(); i != _objList.end(); ++i, ++count) + ; + return count; +} + +/** + * List any currently active objects + */ +void Saver::listObjects() { + Common::List::iterator i; + int count = 1; + + for (i = _objList.begin(); i != _objList.end(); ++i, ++count) + debug("%d - %s", count, (*i)->getClassName().c_str()); + debug(""); +} + /** * Returns the pointer associated with the specified object index */ @@ -358,12 +382,14 @@ void Saver::resolveLoadPointers() { int objIndex = 1; for (SynchronisedList::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) { Common::List::iterator iPtr; + SavedObject *pObj = *iObj; for (iPtr = _unresolvedPtrs.begin(); iPtr != _unresolvedPtrs.end(); ) { SavedObjectRef &r = *iPtr; if (r._objIndex == objIndex) { // Found an unresolved pointer to this object - *r._savedObject = *iObj; + SavedObject **objPP = r._savedObject; + *objPP = pObj; iPtr = _unresolvedPtrs.erase(iPtr); } else { ++iPtr; -- cgit v1.2.3 From b7c9bf4b3306cd8006bc312bbb06ee9d491fa265 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Tue, 19 Apr 2011 21:33:56 +1000 Subject: TSAGE: Simplified the new Saver::getObjectCount method --- engines/tsage/saveload.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'engines/tsage/saveload.cpp') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 73c9d02cb5..d9ae5a1c43 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -350,12 +350,7 @@ int Saver::blockIndexOf(SavedObject *p) { * Returns the number of objects in the object list registry */ int Saver::getObjectCount() const { - int count = 0; - Common::List::const_iterator i; - - for (i = _objList.begin(); i != _objList.end(); ++i, ++count) - ; - return count; + return _objList.size(); } /** -- cgit v1.2.3 From 10b0294c9405356a0bd426285d260a108e66c3d2 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Tue, 19 Apr 2011 17:04:05 +0200 Subject: TSAGE: Suppress empty format string warning of g++. --- engines/tsage/saveload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/tsage/saveload.cpp') diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index d9ae5a1c43..8b07767f22 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -362,7 +362,7 @@ void Saver::listObjects() { for (i = _objList.begin(); i != _objList.end(); ++i, ++count) debug("%d - %s", count, (*i)->getClassName().c_str()); - debug(""); + debugN("\n"); } /** -- cgit v1.2.3