diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 3584e302..48967385 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -492,7 +492,10 @@ qboolean FS_CreatePath (char *OSPath) { if (*ofs == PATH_SEP) { // create the directory *ofs = 0; - Sys_Mkdir (OSPath); + if (!Sys_Mkdir (OSPath)) { + Com_Error( ERR_FATAL, "FS_CreatePath: failed to create path \"%s\"\n", + OSPath ); + } *ofs = PATH_SEP; } } @@ -2807,6 +2810,7 @@ static void FS_Startup( const char *gameName ) // NOTE: same filtering below for mods and basegame if (fs_homepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) { + FS_CreatePath ( fs_homepath->string ); FS_AddGameDirectory ( fs_homepath->string, gameName ); } diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 566687cb..0078e446 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1071,7 +1071,7 @@ qboolean Sys_StringToAdr( const char *s, netadr_t *a, netadrtype_t family ); qboolean Sys_IsLANAddress (netadr_t adr); void Sys_ShowIP(void); -void Sys_Mkdir( const char *path ); +qboolean Sys_Mkdir( const char *path ); char *Sys_Cwd( void ); void Sys_SetDefaultInstallPath(const char *path); char *Sys_DefaultInstallPath(void); @@ -1092,6 +1092,8 @@ void Sys_Sleep(int msec); qboolean Sys_LowPhysicalMemory( void ); +void Sys_SetEnv(const char *name, const char *value); + /* This is based on the Adaptive Huffman algorithm described in Sayood's Data * Compression book. The ranks are not actually stored, but implicitly defined * by the location of a node within a doubly-linked list */ diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index d1131922..f0b2b201 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -55,22 +55,11 @@ char *Sys_DefaultHomePath(void) { Q_strncpyz( homePath, p, sizeof( homePath ) ); #ifdef MACOS_X - Q_strcat( homePath, sizeof( homePath ), "/Library" ); - mkdir( homePath, 0750 ); /* just in case. */ - Q_strcat( homePath, sizeof( homePath ), "/Application Support" ); - mkdir( homePath, 0750 ); /* just in case. */ - Q_strcat( homePath, sizeof( homePath ), "/Quake3" ); + Q_strcat( homePath, sizeof( homePath ), + "/Library/Application Support/Quake3" ); #else Q_strcat( homePath, sizeof( homePath ), "/.q3a" ); #endif - if( mkdir( homePath, 0750 ) ) - { - if( errno != EEXIST ) - { - Sys_Error( "Unable to create directory \"%s\", error is %s(%d)\n", - homePath, strerror( errno ), errno ); - } - } } } @@ -222,9 +211,14 @@ const char *Sys_Dirname( char *path ) Sys_Mkdir ================== */ -void Sys_Mkdir( const char *path ) +qboolean Sys_Mkdir( const char *path ) { - mkdir( path, 0777 ); + int result = mkdir( path, 0750 ); + + if( result != 0 ) + return errno == EEXIST; + + return qtrue; } /* diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 2a4ef848..6c6ac0d7 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -77,14 +77,6 @@ char *Sys_DefaultHomePath( void ) Q_strncpyz( homePath, szPath, sizeof( homePath ) ); Q_strcat( homePath, sizeof( homePath ), "\\Quake3" ); FreeLibrary(shfolder); - if( !CreateDirectory( homePath, NULL ) ) - { - if( GetLastError() != ERROR_ALREADY_EXISTS ) - { - Com_Printf("Unable to create directory \"%s\"\n", homePath ); - return NULL; - } - } } return homePath; @@ -279,9 +271,14 @@ const char *Sys_Dirname( char *path ) Sys_Mkdir ============== */ -void Sys_Mkdir( const char *path ) +qboolean Sys_Mkdir( const char *path ) { - _mkdir (path); + int result = _mkdir( path ); + + if( result != 0 ) + return errno == EEXIST; + + return qtrue; } /*