SaveState: Show which PPSSPP version saved a state when loading it fails

The version comes from the file header and goes in the failure message's
metadata line. A state from another version is the usual reason a load
fails. Headless prints it too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-10-19 16:28:47 +02:00
1 parent a5275067b6
commit 6163bf5911
4 files changed
+33 -11

No files matched your search

+12 -7
View File
@@ -383,7 +383,12 @@ CChunkFileReader::Error CChunkFileReader::LoadFileHeader(File::IOFile &pFile, SC
return ERROR_NONE;
}
CChunkFileReader::Error CChunkFileReader::GetFileTitle(const Path &filename, std::string *title) {
// Not necessarily null-terminated.
static std::string HeaderGitVersion(const char (&gitVersion)[32]) {
return std::string(gitVersion, strnlen(gitVersion, sizeof(gitVersion)));
}
CChunkFileReader::Error CChunkFileReader::GetFileTitle(const Path &filename, std::string *title, std::string *gitVersion) {
if (!File::Exists(filename)) {
ERROR_LOG(Log::SaveState, "ChunkReader: File doesn't exist");
return ERROR_BAD_FILE;
@@ -391,7 +396,11 @@ CChunkFileReader::Error CChunkFileReader::GetFileTitle(const Path &filename, std
File::IOFile pFile(filename, "rb");
SChunkHeader header;
return LoadFileHeader(pFile, header, title);
Error err = LoadFileHeader(pFile, header, title);
if (err == ERROR_NONE && gitVersion) {
*gitVersion = HeaderGitVersion(header.GitVersion);
}
return err;
}
CChunkFileReader::Error CChunkFileReader::LoadFile(const Path &filename, std::string *gitVersion, u8 *&_buffer, size_t &sz, std::string *failureReason) {
@@ -460,11 +469,7 @@ CChunkFileReader::Error CChunkFileReader::LoadFile(const Path &filename, std::st
_buffer = buffer;
}
if (header.GitVersion[31]) {
*gitVersion = std::string(header.GitVersion, 32);
} else {
*gitVersion = header.GitVersion;
}
*gitVersion = HeaderGitVersion(header.GitVersion);
return ERROR_NONE;
}