gets the user's home dir (for ~/.q3a)
*/
-char *LokiGetHomeDir( void )
+char *LokiGetHomeDir(void)
{
#ifndef Q_UNIX
return NULL;
char *home;
uid_t id;
struct passwd *pwd;
+ static char homeBuf[MAX_OS_PATH];
/* get the home environment variable */
}
endpwent();
}
+
+ snprintf(homeBuf, sizeof(homeBuf), "%s/.", home);
/* return it */
- return home;
+ return homeBuf;
#endif
}
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, '/' ) )
*(strrchr( installPath, '/' )) = '\0';
*(strrchr( installPath, '/' ) + 1) = '\0';
}
-
- /* set home path */
- homePath = home;
#endif
}
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++;
}
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 )
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 */