Browse Source

Fix autosave build for DVL_NO_FILESYSTEM targets

Fall back to the regular save flow when UNPACKED_SAVES builds have no filesystem support, compile backup-copy restore paths only when filesystem support is available, and keep demo helpers as documented stubs in that configuration.
pull/8497/head
morfidon 7 days ago
parent
commit
d9a45533a1
  1. 6
      Source/loadsave.cpp
  2. 65
      Source/pfile.cpp

6
Source/loadsave.cpp

@ -2929,6 +2929,11 @@ void SaveGameData(SaveWriter &saveWriter)
void SaveGame()
{
gbValidSaveFile = true;
#if defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM)
pfile_write_hero(/*writeGameData=*/true);
sfile_write_stash();
#else
const bool heroSaved = pfile_write_hero_with_backup(/*writeGameData=*/true);
if (!heroSaved) {
gbValidSaveFile = false;
@ -2939,6 +2944,7 @@ void SaveGame()
gbValidSaveFile = false;
return;
}
#endif
}
void SaveLevel(SaveWriter &saveWriter)

65
Source/pfile.cpp

@ -165,17 +165,15 @@ SaveWriter GetSaveWriter(uint32_t saveNum)
return SaveWriter(GetSavePath(saveNum));
}
SaveWriter GetStashWriter()
{
return SaveWriter(GetStashSavePath());
}
SaveWriter GetStashWriter()
{
return SaveWriter(GetStashSavePath());
}
#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM))
void CopySaveLocation(const std::string &sourceLocation, const std::string &targetLocation)
{
#if defined(UNPACKED_SAVES)
#ifdef DVL_NO_FILESYSTEM
#error "UNPACKED_SAVES requires either DISABLE_DEMOMODE or C++17 <filesystem>"
#endif
if (!targetLocation.empty()) {
CreateDir(targetLocation.c_str());
}
@ -191,9 +189,6 @@ void CopySaveLocation(const std::string &sourceLocation, const std::string &targ
void RestoreSaveLocation(const std::string &targetLocation, const std::string &backupLocation)
{
#if defined(UNPACKED_SAVES)
#ifdef DVL_NO_FILESYSTEM
#error "UNPACKED_SAVES requires either DISABLE_DEMOMODE or C++17 <filesystem>"
#endif
if (DirectoryExists(targetLocation.c_str())) {
for (const std::filesystem::directory_entry &entry : std::filesystem::directory_iterator(targetLocation))
RemoveFile(entry.path().string().c_str());
@ -207,6 +202,7 @@ void RestoreSaveLocation(const std::string &targetLocation, const std::string &b
CopyFileOverwrite(backupLocation.c_str(), targetLocation.c_str());
#endif
}
#endif
void Game2UiPlayer(const Player &player, _uiheroinfo *heroinfo, bool bHasSaveFile)
{
@ -641,12 +637,13 @@ const char *pfile_get_password()
return gbIsMultiplayer ? PASSWORD_MULTI : PASSWORD_SINGLE;
}
void pfile_write_hero(bool writeGameData)
{
SaveWriter saveWriter = GetSaveWriter(gSaveNumber);
pfile_write_hero(saveWriter, writeGameData);
}
void pfile_write_hero(bool writeGameData)
{
SaveWriter saveWriter = GetSaveWriter(gSaveNumber);
pfile_write_hero(saveWriter, writeGameData);
}
#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM))
bool pfile_write_hero_with_backup(bool writeGameData)
{
const std::string backupPrefix = "backup_";
@ -696,8 +693,10 @@ bool pfile_write_stash_with_backup()
return false;
}
#ifndef DISABLE_DEMOMODE
#endif
#ifndef DISABLE_DEMOMODE
#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM))
void pfile_write_hero_demo(int demo)
{
const std::string saveLocation = GetSavePath(gSaveNumber, StrCat("demo_", demo, "_reference_"));
@ -719,13 +718,27 @@ HeroCompareResult pfile_compare_hero_demo(int demo, bool logDetails)
SaveWriter saveWriter(actualSavePath.c_str());
pfile_write_hero(saveWriter, true);
}
return CompareSaves(actualSavePath, referenceSavePath, logDetails);
}
#endif
void sfile_write_stash()
{
return CompareSaves(actualSavePath, referenceSavePath, logDetails);
}
#else
// Demo save comparison is unavailable on UNPACKED_SAVES targets without filesystem support.
void pfile_write_hero_demo(int demo)
{
(void)demo;
}
HeroCompareResult pfile_compare_hero_demo(int demo, bool logDetails)
{
(void)demo;
(void)logDetails;
return { HeroCompareResult::ReferenceNotFound, {} };
}
#endif
#endif
void sfile_write_stash()
{
if (!Stash.dirty)
return;

Loading…
Cancel
Save