mirror of
https://github.com/UberGames/ioef.git
synced 2024-11-24 13:11:30 +00:00
* Resolve symlinks to the binary. This prevents the situation where a symlink
to ioq3 in e.g. /usr/local/bin/ cannot locate the data files since it thinks /usr/local/bin/ is the directory the actual binary sits.
This commit is contained in:
parent
d5509dcd35
commit
c93d8fc185
1 changed files with 50 additions and 2 deletions
|
@ -1335,6 +1335,54 @@ void Sys_PrintBinVersion( const char* name ) {
|
||||||
fprintf( stdout, "%s\n\n", sep );
|
fprintf( stdout, "%s\n\n", sep );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
Sys_BinName
|
||||||
|
|
||||||
|
This resolves any symlinks to the binary. It's disabled for debug
|
||||||
|
builds because there are situations where you are likely to want
|
||||||
|
to symlink to binaries and /not/ have the links resolved.
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
char *Sys_BinName( const char *arg0 )
|
||||||
|
{
|
||||||
|
#ifdef NDEBUG
|
||||||
|
int n;
|
||||||
|
char src[ PATH_MAX ];
|
||||||
|
char dir[ PATH_MAX ];
|
||||||
|
qboolean links = qfalse;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static char dst[ PATH_MAX ];
|
||||||
|
|
||||||
|
Q_strncpyz( dst, arg0, PATH_MAX );
|
||||||
|
|
||||||
|
#ifdef NDEBUG
|
||||||
|
while( ( n = readlink( dst, src, PATH_MAX ) ) >= 0 )
|
||||||
|
{
|
||||||
|
src[ n ] = '\0';
|
||||||
|
|
||||||
|
Q_strncpyz( dir, dirname( dst ), PATH_MAX );
|
||||||
|
Q_strncpyz( dst, dir, PATH_MAX );
|
||||||
|
Q_strcat( dst, PATH_MAX, "/" );
|
||||||
|
Q_strcat( dst, PATH_MAX, src );
|
||||||
|
|
||||||
|
links = qtrue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( links )
|
||||||
|
{
|
||||||
|
Q_strncpyz( dst, Sys_Cwd( ), PATH_MAX );
|
||||||
|
Q_strcat( dst, PATH_MAX, "/" );
|
||||||
|
Q_strcat( dst, PATH_MAX, dir );
|
||||||
|
Q_strcat( dst, PATH_MAX, "/" );
|
||||||
|
Q_strcat( dst, PATH_MAX, src );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
void Sys_ParseArgs( int argc, char* argv[] ) {
|
void Sys_ParseArgs( int argc, char* argv[] ) {
|
||||||
|
|
||||||
if ( argc==2 )
|
if ( argc==2 )
|
||||||
|
@ -1342,7 +1390,7 @@ void Sys_ParseArgs( int argc, char* argv[] ) {
|
||||||
if ( (!strcmp( argv[1], "--version" ))
|
if ( (!strcmp( argv[1], "--version" ))
|
||||||
|| ( !strcmp( argv[1], "-v" )) )
|
|| ( !strcmp( argv[1], "-v" )) )
|
||||||
{
|
{
|
||||||
Sys_PrintBinVersion( argv[0] );
|
Sys_PrintBinVersion( Sys_BinName( argv[0] ) );
|
||||||
Sys_Exit(0);
|
Sys_Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1365,7 +1413,7 @@ int main ( int argc, char* argv[] )
|
||||||
|
|
||||||
Sys_ParseArgs( argc, argv ); // bk010104 - added this for support
|
Sys_ParseArgs( argc, argv ); // bk010104 - added this for support
|
||||||
|
|
||||||
strncat(cdpath, argv[0], sizeof(cdpath)-1);
|
strncat(cdpath, Sys_BinName( argv[0] ), sizeof(cdpath)-1);
|
||||||
Sys_SetDefaultCDPath(dirname(cdpath));
|
Sys_SetDefaultCDPath(dirname(cdpath));
|
||||||
|
|
||||||
Sys_SetDefaultInstallPath(DEFAULT_BASEDIR);
|
Sys_SetDefaultInstallPath(DEFAULT_BASEDIR);
|
||||||
|
|
Loading…
Reference in a new issue