From e34cc10e2d07a5fb56002c3e4bb9cf871925b99b Mon Sep 17 00:00:00 2001 From: divverent Date: Tue, 8 Jan 2008 09:50:19 +0000 Subject: [PATCH] make it use APPDATA right git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7935 d7cf8633-e32d-0410-b094-e92efae38249 --- fs.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/fs.c b/fs.c index 759f29e3..2454bea3 100644 --- a/fs.c +++ b/fs.c @@ -30,6 +30,7 @@ #ifdef WIN32 # include # include +# include #else # include # include @@ -1013,8 +1014,12 @@ FS_AddGameHierarchy void FS_AddGameHierarchy (const char *dir) { int i; - const char *homedir; char userdir[MAX_QPATH]; +#ifdef WIN32 + TCHAR appdata[MAX_PATH + 1]; +#else + const char *homedir; +#endif // Add the common game directory FS_AddGameDirectory (va("%s%s/", fs_basedir, dir)); @@ -1023,18 +1028,27 @@ void FS_AddGameHierarchy (const char *dir) // Add the personal game directory #ifdef WIN32 - homedir = getenv ("APPDATA"); - dpsnprintf(userdir, sizeof(userdir), "%s/%s/", homedir, gameuserdirname); + if(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata) == S_OK) + dpsnprintf(userdir, sizeof(userdir), "%s/%s/", appdata, gameuserdirname); #else homedir = getenv ("HOME"); - dpsnprintf(userdir, sizeof(userdir), "%s/.%s/", homedir, gameuserdirname); + if(homedir) + dpsnprintf(userdir, sizeof(userdir), "%s/.%s/", homedir, gameuserdirname); #endif #ifdef WIN32 - if(!COM_CheckParm("-appdata")) // TODO make this the default when fs_basedir isn't writable -#else - if(COM_CheckParm("-nohome")) + if(!COM_CheckParm("-appdata")) + { + int fd = open (va("%s%s/config.cfg", fs_basedir, dir), O_WRONLY | O_CREAT | O_APPEND, 0666); + if(fd >= 0) + { + close(fd); + *userdir = 0; // we have write access to the game dir, so let's use it + } + } #endif + + if(COM_CheckParm("-nohome")) *userdir = 0; if((i = COM_CheckParm("-userdir")) && i < com_argc - 1) -- 2.39.2