mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-22 20:51:31 +00:00
Refactor the "home"-path finding logic into own functions
With this change the homedir is no longer selected in the filesystem, but in platform dependend functions. This allows us to use WINABI calls for selection, resulting using the apropriate diretory on localized versions of Windows XP.
This commit is contained in:
parent
e8eea857e4
commit
e70067ceba
4 changed files with 66 additions and 39 deletions
|
@ -1253,51 +1253,18 @@ FS_AddGameDirectory(const char *dir)
|
|||
void
|
||||
FS_AddHomeAsGameDirectory(char *dir)
|
||||
{
|
||||
char *home;
|
||||
char gdir[MAX_OSPATH];
|
||||
int len;
|
||||
|
||||
#ifdef _WIN32
|
||||
char *cur;
|
||||
char *old;
|
||||
char *profile = getenv("USERPROFILE");
|
||||
size_t len;
|
||||
|
||||
if (!profile)
|
||||
home = Sys_GetHomeDir();
|
||||
|
||||
if (home == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
cur = old = profile;
|
||||
|
||||
/* Replace backslashes by slashes */
|
||||
if (strstr(cur, "\\") != NULL)
|
||||
{
|
||||
while (cur != NULL)
|
||||
{
|
||||
if ((cur - old) > 1)
|
||||
{
|
||||
*cur = '/';
|
||||
|
||||
}
|
||||
|
||||
old = cur;
|
||||
cur = strchr(old + 1, '\\');
|
||||
}
|
||||
}
|
||||
|
||||
len = snprintf(gdir, sizeof(gdir), "%s%s%s/", profile,
|
||||
"/Documents/YamagiQ2/", dir);
|
||||
#else
|
||||
char *homedir = getenv("HOME");
|
||||
|
||||
if (!homedir)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
len = snprintf(gdir, sizeof(gdir), "%s/.yq2/%s/", homedir, dir);
|
||||
#endif
|
||||
|
||||
|
||||
len = snprintf(gdir, sizeof(gdir), "%s%s/", home, dir);
|
||||
FS_CreatePath(gdir);
|
||||
|
||||
if ((len > 0) && (len < sizeof(gdir)) && (gdir[len-1] == '/'))
|
||||
|
|
|
@ -55,6 +55,12 @@
|
|||
#define CPUSTRING "Unknown"
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#define CFGDIR "YamagiQ2"
|
||||
#else
|
||||
#define CFGDIR ".yq2"
|
||||
#endif
|
||||
|
||||
/* ================================================================== */
|
||||
|
||||
typedef struct sizebuf_s
|
||||
|
@ -741,6 +747,7 @@ void Sys_ConsoleOutput (char *string);
|
|||
void Sys_SendKeyEvents (void);
|
||||
void Sys_Error (char *error, ...);
|
||||
void Sys_Quit (void);
|
||||
char *Sys_GetHomeDir(void);
|
||||
|
||||
/* CLIENT / SERVER SYSTEMS */
|
||||
|
||||
|
|
|
@ -501,3 +501,22 @@ Sys_SendKeyEvents ( void )
|
|||
/* grab frame time */
|
||||
sys_frame_time = Sys_Milliseconds();
|
||||
}
|
||||
|
||||
char *
|
||||
Sys_GetHomeDir(void)
|
||||
{
|
||||
static char gdir[MAX_OSPATH];
|
||||
char *home;
|
||||
|
||||
home = getenv("HOME");
|
||||
|
||||
if (!home)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
snprintf(gdir, sizeof(gdir), "%s/%s/", home, CFGDIR);
|
||||
|
||||
return gdir;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <direct.h>
|
||||
#include <io.h>
|
||||
#include <conio.h>
|
||||
#include <shlobj.h>
|
||||
|
||||
#include "../common/header/common.h"
|
||||
#include "header/conproc.h"
|
||||
|
@ -606,6 +607,39 @@ Sys_GetCurrentDirectory(void)
|
|||
return dir;
|
||||
}
|
||||
|
||||
char *
|
||||
Sys_GetHomeDir(void)
|
||||
{
|
||||
char *old;
|
||||
char *cur;
|
||||
static char gdir[MAX_OSPATH];
|
||||
TCHAR profile[MAX_OSPATH];
|
||||
|
||||
SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, profile);
|
||||
|
||||
/* Replace backslashes by slashes */
|
||||
cur = old = profile;
|
||||
|
||||
if (strstr(cur, "\\") != NULL)
|
||||
{
|
||||
while (cur != NULL)
|
||||
{
|
||||
if ((cur - old) > 1)
|
||||
{
|
||||
*cur = '/';
|
||||
|
||||
}
|
||||
|
||||
old = cur;
|
||||
cur = strchr(old + 1, '\\');
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(gdir, sizeof(gdir), "%s/%s/", profile, CFGDIR);
|
||||
|
||||
return gdir;
|
||||
}
|
||||
|
||||
/* ======================================================================= */
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue