- overhaul of savegame path management.
* use a different subfolder for each IWAD's saves. * do not allow load and save CCMDs to escape the save folder. Absolute paths and '..' are being blocked now. * unified savegame path and filename generation in one single function. All ad-hoc file name generation was replaced. * -loadgame will also use the designated savegame folder now.
This commit is contained in:
parent
f0601a49a2
commit
ff37d710e2
8 changed files with 87 additions and 88 deletions
|
|
@ -46,8 +46,11 @@
|
|||
#include "findfile.h"
|
||||
#include "v_draw.h"
|
||||
#include "savegamemanager.h"
|
||||
#include "m_argv.h"
|
||||
#include "i_specialpaths.h"
|
||||
|
||||
|
||||
CVAR(String, save_dir, "", CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
|
||||
FString SavegameFolder;
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
|
|
@ -538,3 +541,56 @@ DEFINE_FIELD_X(SavegameManager, FSavegameManagerBase, WindowSize);
|
|||
DEFINE_FIELD_X(SavegameManager, FSavegameManagerBase, quickSaveSlot);
|
||||
DEFINE_FIELD_X(SavegameManager, FSavegameManagerBase, SaveCommentString);
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// todo: cache this - it never changes once set up.
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
FString G_GetSavegamesFolder()
|
||||
{
|
||||
FString name;
|
||||
bool usefilter;
|
||||
|
||||
if (const char* const dir = Args->CheckValue("-savedir"))
|
||||
{
|
||||
name = dir;
|
||||
usefilter = false; //-savedir specifies an absolute save directory path.
|
||||
}
|
||||
else
|
||||
{
|
||||
name = **save_dir ? save_dir : M_GetSavegamesPath();
|
||||
usefilter = true;
|
||||
}
|
||||
|
||||
const size_t len = name.Len();
|
||||
if (len > 0)
|
||||
{
|
||||
FixPathSeperator(name);
|
||||
if (name[len - 1] != '/')
|
||||
name << '/';
|
||||
}
|
||||
|
||||
if (usefilter && SavegameFolder.IsNotEmpty())
|
||||
name << SavegameFolder << '/';
|
||||
|
||||
name = NicePath(name);
|
||||
CreatePath(name);
|
||||
return name;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
//
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
FString G_BuildSaveName(const char* prefix)
|
||||
{
|
||||
FString name = G_GetSavegamesFolder() + prefix;
|
||||
DefaultExtension(name, "." SAVEGAME_EXT); // only add an extension if the prefix doesn't have one already.
|
||||
name = NicePath(name);
|
||||
name.Substitute("\\", "/");
|
||||
return name;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue