From 49b790a8f608a35b4b2cf806cd64ecfa4c6aa5d0 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Thu, 29 Aug 2019 14:34:02 +0300 Subject: [PATCH] - fixed: saving game to read-only file was erroneously reported as succeeded --- src/g_game.cpp | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/g_game.cpp b/src/g_game.cpp index d86d868e0..6c6a1ef10 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -2324,28 +2324,38 @@ void G_DoSaveGame (bool okForQuicksave, bool forceQuicksave, FString filename, c G_WriteSnapshots (savegame_filenames, savegame_content); - WriteZip(filename, savegame_filenames, savegame_content); + bool succeeded = false; + + if (WriteZip(filename, savegame_filenames, savegame_content)) + { + // Check whether the file is ok by trying to open it. + FResourceFile *test = FResourceFile::OpenResourceFile(filename, true); + if (test != nullptr) + { + delete test; + succeeded = true; + } + } + + if (succeeded) + { + savegameManager.NotifyNewSave(filename, description, okForQuicksave, forceQuicksave); + BackupSaveName = filename; + + if (longsavemessages) Printf("%s (%s)\n", GStrings("GGSAVED"), filename.GetChars()); + else Printf("%s\n", GStrings("GGSAVED")); + } + else + { + Printf(PRINT_HIGH, "%s\n", GStrings("TXT_SAVEFAILED")); + } - savegameManager.NotifyNewSave (filename, description, okForQuicksave, forceQuicksave); // delete the JSON buffers we created just above. Everything else will // either still be needed or taken care of automatically. savegame_content[1].Clean(); savegame_content[2].Clean(); - // Check whether the file is ok by trying to open it. - FResourceFile *test = FResourceFile::OpenResourceFile(filename, true); - if (test != nullptr) - { - delete test; - if (longsavemessages) Printf ("%s (%s)\n", GStrings("GGSAVED"), filename.GetChars()); - else Printf ("%s\n", GStrings("GGSAVED")); - } - else Printf(PRINT_HIGH, "%s\n", GStrings("TXT_SAVEFAILED")); - - - BackupSaveName = filename; - // We don't need the snapshot any longer. level.info->Snapshot.Clean();