From c68c8c388cc29cfd4e97be8fc7f5ea7534508672 Mon Sep 17 00:00:00 2001 From: nitsuja Date: Sat, 17 Dec 2011 16:49:24 -0800 Subject: made savestate loads less fragile by adding some markers and rolling back on a mismatch. This should make it so if you try to load an incompatible save, it simply doesn't load, instead of crashing dolphin. (I can't guarantee no crash but it's much less likely now) --- Source/Core/Common/Src/ChunkFile.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'Source/Core/Common') diff --git a/Source/Core/Common/Src/ChunkFile.h b/Source/Core/Common/Src/ChunkFile.h index 03216deaf1..b0662d2517 100644 --- a/Source/Core/Common/Src/ChunkFile.h +++ b/Source/Core/Common/Src/ChunkFile.h @@ -170,6 +170,17 @@ public: // TODO PanicAlert("Do(linked list<>) does not yet work."); } + + void DoMarker(const char* prevName, u32 arbitraryNumber=0x42) + { + u32 cookie = arbitraryNumber; + Do(cookie); + if(mode == PointerWrap::MODE_READ && cookie != arbitraryNumber) + { + PanicAlertT("Error: After \"%s\", found %d (0x%X) instead of save marker %d (0x%X). Aborting savestate load...", prevName, cookie, cookie, arbitraryNumber, arbitraryNumber); + mode = PointerWrap::MODE_MEASURE; + } + } }; -- cgit v1.2.3