From 9c4484196a6a5daa1b8c7426a67f6158659027c3 Mon Sep 17 00:00:00 2001 From: James Haley Date: Fri, 11 Feb 2011 03:02:45 +0000 Subject: Finished routines in m_saves.c. Added M_CreateSaveDirs to make directories under the standard choco savegamedir for each Strife saveslot. Subversion-branch: /branches/strife-branch Subversion-revision: 2253 --- src/strife/d_main.c | 1 + src/strife/m_saves.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++----- src/strife/m_saves.h | 14 +++++++- 3 files changed, 103 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/strife/d_main.c b/src/strife/d_main.c index 8ffcc2ad..2d9d14a0 100644 --- a/src/strife/d_main.c +++ b/src/strife/d_main.c @@ -933,6 +933,7 @@ static void SetSaveGameDir(char *iwad_filename) M_MakeDirectory(savegamedir); // haleyjd 20110210: Create Strife hub save folders + M_CreateSaveDirs(savegamedir); } // Check if the IWAD file is the Chex Quest IWAD. diff --git a/src/strife/m_saves.c b/src/strife/m_saves.c index 6b99a7a8..a49302c8 100644 --- a/src/strife/m_saves.c +++ b/src/strife/m_saves.c @@ -2,7 +2,6 @@ //----------------------------------------------------------------------------- // // Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 1996 Rogue Entertainment / Velocity, Inc. // Copyright(C) 2010 James Haley, Samuel Villareal // // This program is free software; you can redistribute it and/or @@ -55,9 +54,9 @@ // // Strife maintains multiple file paths related to savegames. // -char *savepath; -char *savepath2; -char *loadpath; +char *savepath; // The actual path of the saveslot? +char *savepath2; // The path of the temporary saveslot? +char *loadpath; // Path used while loading the game // // ClearTmp @@ -101,10 +100,30 @@ void ClearTmp(void) // void ClearSlot(void) { + DIR *spdir = NULL; + struct dirent *f = NULL; + if(savepath == NULL) I_Error("userdir is fucked up man!"); - // STRIFE-TODO + if(!(spdir = opendir(savepath))) + I_Error("ClearSlot: Couldn't open dir %s", savepath); + + while((f = readdir(spdir))) + { + char *filepath = NULL; + + if(!strcmp(f->d_name, ".") || !strcmp(f->d_name, "..")) + continue; + + // haleyjd: use M_SafeFilePath, not sprintf + filepath = M_SafeFilePath(savepath, f->d_name); + remove(filepath); + + Z_Free(filepath); + } + + closedir(spdir); } // @@ -148,13 +167,45 @@ void FromCurr(void) } // -// ????? +// ToCurr // -// More file moving; don't even know what to call it yet. +// Copying files from savepath to savepath2 // -void sub_1B2F4(void) +void ToCurr(void) { - // STRIFE-TODO + DIR *spdir = NULL; + struct dirent *f = NULL; + + ClearTmp(); + + // BUG: Rogue copypasta'd this error message, which is why we don't know + // the real original name of this function. + if(!(spdir = opendir(savepath))) + I_Error("ClearSlot: Couldn't open dir %s", savepath); + + while((f = readdir(spdir))) + { + byte *filebuffer = NULL; + int filelen = 0; + char *srcfilename = NULL; + char *dstfilename = NULL; + + if(!strcmp(f->d_name, ".") || !strcmp(f->d_name, "..")) + continue; + + // haleyjd: use M_SafeFilePath, NOT sprintf. + srcfilename = M_SafeFilePath(savepath, f->d_name); + dstfilename = M_SafeFilePath(savepath2, f->d_name); + + filelen = M_ReadFile(srcfilename, &filebuffer); + M_WriteFile(dstfilename, filebuffer, filelen); + + Z_Free(filebuffer); + Z_Free(srcfilename); + Z_Free(dstfilename); + } + + closedir(spdir); } // @@ -387,6 +438,35 @@ char *M_SafeFilePath(const char *basepath, const char *newcomponent) return newstr; } +// +// M_CreateSaveDirs +// +// haleyjd 20110210: Vanilla Strife went tits-up if it didn't have the full set +// of save folders which were created externally by the installer. fraggle says +// that's no good for Choco purposes, and I agree, so this routine will create +// the full set of folders under the configured savegamedir. +// +void M_CreateSaveDirs(const char *savedir) +{ + int i; + + for(i = 0; i < 7; i++) + { + char dirname[16]; + char *compositedir; + + memset(dirname, 0, sizeof(dirname)); + sprintf(dirname, "STRFSAV%d.SSG", i); + + // compose the full path by concatenating with savedir + compositedir = M_SafeFilePath(savedir, dirname); + + M_MakeDirectory(compositedir); + + Z_Free(compositedir); + } +} + // // M_GetFilePath // diff --git a/src/strife/m_saves.h b/src/strife/m_saves.h index b55ffa12..8942f237 100644 --- a/src/strife/m_saves.h +++ b/src/strife/m_saves.h @@ -2,7 +2,6 @@ //----------------------------------------------------------------------------- // // Copyright(C) 1993-1996 Id Software, Inc. -// Copyright(C) 1996 Rogue Entertainment / Velocity, Inc. // Copyright(C) 2010 James Haley, Samuel Villareal // // This program is free software; you can redistribute it and/or @@ -31,8 +30,20 @@ #ifndef M_SAVES_H__ #define M_SAVES_H__ +extern char *savepath; +extern char *savepath2; +extern char *loadpath; + // Strife Savegame Functions +void ClearTmp(void); +void ClearSlot(void); +void FromCurr(void); +void ToCurr(void); +void M_SaveMoveMapToHere(void); +void M_SaveMoveHereToMap(void); + boolean M_SaveMisObj(const char *path); +void M_ReadMisObj(void); // Custom Utilities for Filepath Handling void *M_Calloc(size_t n1, size_t n2); @@ -40,6 +51,7 @@ void M_NormalizeSlashes(char *str); int M_StringAlloc(char **str, int numstrs, size_t extra, const char *str1, ...); char *M_SafeFilePath(const char *basepath, const char *newcomponent); char M_GetFilePath(const char *fn, char *dest, size_t len); +void M_CreateSaveDirs(const char *savedir); #endif -- cgit v1.2.3