diff options
author | tjw <tjw@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2006-08-16 05:22:09 +0000 |
---|---|---|
committer | tjw <tjw@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2006-08-16 05:22:09 +0000 |
commit | bd8e88e4a00f4850cbdb495f441fa0aa4afe530d (patch) | |
tree | b238ad45fa7ae07fda12eabfad90606bd642fd93 /code | |
parent | 51af4ceebe922d27ee3a93d2c763b5a3aedd5474 (diff) | |
download | ioquake3-aero-bd8e88e4a00f4850cbdb495f441fa0aa4afe530d.tar.gz ioquake3-aero-bd8e88e4a00f4850cbdb495f441fa0aa4afe530d.zip |
bug 2723
* replaced my cheap hack to search current working dir on OS X with a more
complex hack that detects the .app bundle directory structure. This is so
the game data dirs do not need to be inside of the .app bundle btw.
git-svn-id: svn://svn.icculus.org/quake3/trunk@844 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code')
-rw-r--r-- | code/qcommon/files.c | 4 | ||||
-rw-r--r-- | code/unix/unix_main.c | 36 |
2 files changed, 35 insertions, 5 deletions
diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 4227128..af5518b 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2829,10 +2829,6 @@ static void FS_Startup( const char *gameName ) { if (fs_basepath->string[0]) { FS_AddGameDirectory( fs_basepath->string, gameName ); } -#ifdef MACOS_X - // allow .app bundles to be placed along side base dir - FS_AddGameDirectory( ".", gameName ); -#endif // fs_homepath is somewhat particular to *nix systems, only add if relevant // NOTE: same filtering below for mods and basegame if (fs_basepath->string[0] && Q_stricmp(fs_homepath->string,fs_basepath->string)) { diff --git a/code/unix/unix_main.c b/code/unix/unix_main.c index 47746ab..c432026 100644 --- a/code/unix/unix_main.c +++ b/code/unix/unix_main.c @@ -1382,8 +1382,42 @@ void Sys_ParseArgs( int argc, char* argv[] ) { } } +#ifdef MACOS_X +/* +================= +Sys_EscapeAppBundle + +Discovers if passed dir is suffixed with the directory structure of a +Mac OS X .app bundle. If it is, the .app directory structure is stripped off +the end and the result is returned. If not, dir is returned untouched. + +================= +*/ +char *Sys_StripAppBundle(char *dir) +{ + static char cwd[MAX_OSPATH]; + + Q_strncpyz(cwd, dir, sizeof(cwd)); + if(strcmp(basename(cwd), "MacOS")) + return dir; + Q_strncpyz(cwd, dirname(cwd), sizeof(cwd)); + if(strcmp(basename(cwd), "Contents")) + return dir; + Q_strncpyz(cwd, dirname(cwd), sizeof(cwd)); + if(!strstr(basename(cwd), ".app")) + return dir; + Q_strncpyz(cwd, dirname(cwd), sizeof(cwd)); + return cwd; +} +#endif /* MACOS_X */ + #ifndef DEFAULT_BASEDIR -# define DEFAULT_BASEDIR Sys_DefaultCDPath() + #ifdef MACOS_X + // if run from an .app bundle, we want to also search its containing dir + #define DEFAULT_BASEDIR Sys_StripAppBundle(Sys_DefaultCDPath()) + #else + #define DEFAULT_BASEDIR Sys_DefaultCDPath() + #endif #endif #include "../client/client.h" |