From 16b11138b4e63c11465452b3ba49be36f4a4efc6 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 14 Jun 2018 18:25:52 -0700 Subject: [PATCH] SaveState: Use latest version if initial missing. This may be useful for debugging or if we decide on a buffer between versions. --- Common/ChunkFile.cpp | 8 +++++++- Common/ChunkFile.h | 4 ++-- Core/SaveState.cpp | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Common/ChunkFile.cpp b/Common/ChunkFile.cpp index 3560c6eeb4..cbc8dc1808 100644 --- a/Common/ChunkFile.cpp +++ b/Common/ChunkFile.cpp @@ -225,7 +225,7 @@ CChunkFileReader::Error CChunkFileReader::GetFileTitle(const std::string &filena return LoadFileHeader(pFile, header, title); } -CChunkFileReader::Error CChunkFileReader::LoadFile(const std::string &filename, const char *gitVersion, u8 *&_buffer, size_t &sz, std::string *failureReason) { +CChunkFileReader::Error CChunkFileReader::LoadFile(const std::string &filename, std::string *gitVersion, u8 *&_buffer, size_t &sz, std::string *failureReason) { if (!File::Exists(filename)) { *failureReason = "LoadStateDoesntExist"; ERROR_LOG(SAVESTATE, "ChunkReader: File doesn't exist"); @@ -264,6 +264,12 @@ CChunkFileReader::Error CChunkFileReader::LoadFile(const std::string &filename, delete [] buffer; } + if (header.GitVersion[31]) { + *gitVersion = std::string(header.GitVersion, 32); + } else { + *gitVersion = header.GitVersion; + } + return ERROR_NONE; } diff --git a/Common/ChunkFile.h b/Common/ChunkFile.h index 6fc76ddb29..dba69b0da0 100644 --- a/Common/ChunkFile.h +++ b/Common/ChunkFile.h @@ -622,7 +622,7 @@ public: // Load file template template - static Error Load(const std::string &filename, const char *gitVersion, T& _class, std::string *failureReason) + static Error Load(const std::string &filename, std::string *gitVersion, T& _class, std::string *failureReason) { *failureReason = "LoadStateWrongVersion"; @@ -700,7 +700,7 @@ private: REVISION_CURRENT = REVISION_TITLE, }; - static Error LoadFile(const std::string &filename, const char *gitVersion, u8 *&buffer, size_t &sz, std::string *failureReason); + static Error LoadFile(const std::string &filename, std::string *gitVersion, u8 *&buffer, size_t &sz, std::string *failureReason); static Error SaveFile(const std::string &filename, const std::string &title, const char *gitVersion, u8 *buffer, size_t sz); static Error LoadFileHeader(File::IOFile &pFile, SChunkHeader &header, std::string *title); }; diff --git a/Core/SaveState.cpp b/Core/SaveState.cpp index d665e33689..7d4327307d 100644 --- a/Core/SaveState.cpp +++ b/Core/SaveState.cpp @@ -268,7 +268,6 @@ namespace SaveState p.Do(saveStateInitialGitVersion); } else { saveStateGeneration = 1; - saveStateInitialGitVersion = "v0.0.1"; } // Gotta do CoreTiming first since we'll restore into it. @@ -699,7 +698,8 @@ namespace SaveState { case SAVESTATE_LOAD: INFO_LOG(SAVESTATE, "Loading state from %s", op.filename.c_str()); - result = CChunkFileReader::Load(op.filename, PPSSPP_GIT_VERSION, state, &reason); + // Use the state's latest version as a guess for saveStateInitialGitVersion. + result = CChunkFileReader::Load(op.filename, &saveStateInitialGitVersion, state, &reason); if (result == CChunkFileReader::ERROR_NONE) { callbackMessage = sc->T("Loaded State"); callbackResult = Status::SUCCESS;