When converting Gamedata, Profiles, and Serverstats files forwards to future versions, create backups.

- Same name, but with a ".bak" appended.
- Also prevents future versions of serverstats from being loaded into older executables.
This commit is contained in:
toaster 2023-05-31 13:18:56 +01:00
parent ceb1655185
commit 5f1f3a6fe3
3 changed files with 21 additions and 1 deletions

View file

@ -4851,6 +4851,12 @@ void G_LoadGameData(void)
P_SaveBufferFree(&save);
I_Error("Game data is from the future! (expected %d, got %d)\nRename or delete %s (maybe in %s) and try again.", GD_VERSIONMINOR, versionMinor, gamedatafilename, gdfolder);
}
else if (versionMinor < GD_VERSIONMINOR)
{
// We're converting - let'd create a backup.
FIL_WriteFile(va("%s" PATHSEP "%s.bak", srb2home, gamedatafilename), save.buffer, save.size);
}
if ((versionMinor == 0 || versionMinor == 1)
#ifdef DEVELOP
|| M_CheckParm("-resetchallengegrid")

View file

@ -329,6 +329,11 @@ void PR_LoadProfiles(void)
P_SaveBufferFree(&save);
I_Error("Existing %s is from the future! (expected %d, got %d)", PROFILESFILE, PROFILEVER, version);
}
else if (version < PROFILEVER)
{
// We're converting - let'd create a backup.
FIL_WriteFile(va("%s" PATHSEP "%s.bak", srb2home, PROFILESFILE), save.buffer, save.size);
}
numprofiles = READUINT8(save.p);
if (numprofiles > MAXPROFILES)

View file

@ -98,7 +98,16 @@ void SV_LoadStats(void)
save.p += headerlen;
UINT8 version = READUINT8(save.p);
(void)version; // for now
if (version > SERVERSTATSVER)
{
P_SaveBufferFree(&save);
I_Error("Existing %s is from the future! (expected %d, got %d)", SERVERSTATSFILE, SERVERSTATSVER, version);
}
else if (version < SERVERSTATSVER)
{
// We're converting - let'd create a backup.
FIL_WriteFile(va("%s" PATHSEP "%s.bak", srb2home, SERVERSTATSFILE), save.buffer, save.size);
}
numtracked = READUINT32(save.p);