X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=tools%2Fquake3%2Fq3map2%2Fpath_init.c;h=4994c5f5712af05ac4fa3c7e967e97d86ecffaed;hb=dbaf1a8f003a2c48a8c0ccc2a89fccb4a96be054;hp=83383e2287ba3cdae523ab375748b7cb2387b046;hpb=de28d9de1d75fd0a8ce419d695962c502aa6a3e3;p=xonotic%2Fnetradiant.git diff --git a/tools/quake3/q3map2/path_init.c b/tools/quake3/q3map2/path_init.c index 83383e22..4994c5f5 100644 --- a/tools/quake3/q3map2/path_init.c +++ b/tools/quake3/q3map2/path_init.c @@ -62,7 +62,7 @@ PathLokiGetHomeDir() gets the user's home dir (for ~/.q3a) */ -char *LokiGetHomeDir( void ) +char *LokiGetHomeDir(void) { #ifndef Q_UNIX return NULL; @@ -70,6 +70,7 @@ char *LokiGetHomeDir( void ) char *home; uid_t id; struct passwd *pwd; + static char homeBuf[MAX_OS_PATH]; /* get the home environment variable */ @@ -89,9 +90,11 @@ char *LokiGetHomeDir( void ) } endpwent(); } + + snprintf(homeBuf, sizeof(homeBuf), "%s/.", home); /* return it */ - return home; + return homeBuf; #endif } @@ -104,23 +107,32 @@ initializes some paths on linux/os x void LokiInitPaths( char *argv0 ) { + char *home; + + if(!homePath) + { + /* get home dir */ + home = LokiGetHomeDir(); + if( home == NULL ) + home = "."; + + /* set home path */ + homePath = home; + } + else + home = homePath; + #ifndef Q_UNIX /* this is kinda crap, but hey */ strcpy( installPath, "../" ); #else char temp[ MAX_OS_PATH ]; char last0[ 2 ]; - char *home; char *path; char *last; qboolean found; - /* get home dir */ - home = LokiGetHomeDir(); - if( home == NULL ) - home = "."; - /* do some path divining */ strcpy( temp, argv0 ); if( strrchr( argv0, '/' ) ) @@ -177,9 +189,6 @@ void LokiInitPaths( char *argv0 ) *(strrchr( installPath, '/' )) = '\0'; *(strrchr( installPath, '/' ) + 1) = '\0'; } - - /* set home path */ - homePath = home; #endif } @@ -272,28 +281,51 @@ adds a base path to the beginning of the list, prefixed by ~/ void AddHomeBasePath( char *path ) { - #ifdef Q_UNIX - int i; - char temp[ MAX_OS_PATH ]; - - - /* dummy check */ - if( path == NULL || path[ 0 ] == '\0' ) - return; + int i; + char temp[ MAX_OS_PATH ]; + int homePathLen; + + if(!homePath) + return; + + /* dummy check */ + if( path == NULL || path[ 0 ] == '\0' ) + return; + + /* strip leading dot, if homePath does not end in /. */ + homePathLen = strlen(homePath); + if(!strcmp(path, ".")) + { + /* -fs_homebase . means that -fs_home is to be used as is */ + strcpy(temp, homePath); + } + else if(homePathLen >= 2 && !strcmp(homePath + homePathLen - 2, "/.")) + { + /* remove trailing /. of homePath */ + homePathLen -= 2; + + /* concatenate home dir and path */ + sprintf( temp, "%.*s/%s", homePathLen, homePath, path ); + } + else + { + /* remove leading . of path */ + if(path[0] == '.') + ++path; - /* make a hole */ - for( i = (MAX_BASE_PATHS - 2); i >= 0; i-- ) - basePaths[ i + 1 ] = basePaths[ i ]; - /* concatenate home dir and path */ sprintf( temp, "%s/%s", homePath, path ); - - /* add it to the list */ - basePaths[ 0 ] = safe_malloc( strlen( temp ) + 1 ); - strcpy( basePaths[ 0 ], temp ); - CleanPath( basePaths[ 0 ] ); - numBasePaths++; - #endif + } + + /* make a hole */ + for( i = (MAX_BASE_PATHS - 2); i >= 0; i-- ) + basePaths[ i + 1 ] = basePaths[ i ]; + + /* add it to the list */ + basePaths[ 0 ] = safe_malloc( strlen( temp ) + 1 ); + strcpy( basePaths[ 0 ], temp ); + CleanPath( basePaths[ 0 ] ); + numBasePaths++; } @@ -411,7 +443,17 @@ void InitPaths( int *argc, char **argv ) argv[ i ] = NULL; } - /* -fs_nohomebase */ + /* -fs_home */ + else if( strcmp( argv[ i ], "-fs_home" ) == 0 ) + { + if( ++i >= *argc ) + Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] ); + argv[ i - 1 ] = NULL; + homePath = argv[i]; + argv[ i ] = NULL; + } + + /* -fs_homebase */ else if( strcmp( argv[ i ], "-fs_homebase" ) == 0 ) { if( ++i >= *argc ) @@ -420,6 +462,17 @@ void InitPaths( int *argc, char **argv ) homeBasePath = argv[i]; argv[ i ] = NULL; } + + /* -fs_homepath - sets both of them */ + else if( strcmp( argv[ i ], "-fs_homepath" ) == 0 ) + { + if( ++i >= *argc ) + Error( "Out of arguments: No path specified after %s.", argv[ i - 1 ] ); + argv[ i - 1 ] = NULL; + homePath = argv[i]; + homeBasePath = "."; + argv[ i ] = NULL; + } } /* remove processed arguments */