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)
This commit is contained in:
nitsuja
2011-12-17 16:49:24 -08:00
parent 98d22d0e03
commit c68c8c388c
5 changed files with 55 additions and 6 deletions

View File

@ -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;
}
}
};