Allow launching through a symlink. It doesn't work quite like normal applications. Menus don't show up, it doesn't really seem to know where it is.

Still, most people just would use the Finder and never encounter this behavior.
This commit is contained in:
Steve Checkoway
2006-08-14 15:31:52 +00:00
parent 832212c526
commit c6936984b4
2 changed files with 13 additions and 10 deletions
+6 -1
View File
@@ -221,7 +221,12 @@ static void ChangeToDirOfExecutable( const RString &argv0 )
#if defined(_WINDOWS)
chdir( RageFileManagerUtil::sDirOfExecutable + "/.." );
#elif defined(MACOSX)
chdir( RageFileManagerUtil::sDirOfExecutable + "/../../.." );
/* If the basename is not MacOS, then we've likely been launched via the command line
* through a symlink. Assume this is the case and change to the dir of the symlink. */
puts( RageFileManagerUtil::sDirOfExecutable );
if( Basename(RageFileManagerUtil::sDirOfExecutable) == "MacOS" )
CollapsePath( RageFileManagerUtil::sDirOfExecutable += "/../../.." );
chdir( RageFileManagerUtil::sDirOfExecutable );
#endif
}
@@ -83,10 +83,15 @@ void ArchHooks_darwin::Init()
CFBundleRef bundle = CFBundleGetMainBundle();
CFStringRef appID = CFBundleGetIdentifier( bundle );
if( appID == NULL )
{
// We were probably launched through a symlink. Don't bother hunting down the real path.
return;
}
CFStringRef version = CFStringRef( CFBundleGetValueForInfoDictionaryKey(bundle, kCFBundleVersionKey) );
CFPropertyListRef old = CFPreferencesCopyAppValue( key, appID );
CFURLRef path = CFBundleCopyBundleURL( bundle );
CFPropertyListRef value = CFURLCopyFileSystemPath( path, kCFURLPOSIXPathStyle );
CFPropertyListRef old = CFPreferencesCopyAppValue( key, appID );
CFMutableDictionaryRef newDict = NULL;
if( old && CFGetTypeID(old) != CFDictionaryGetTypeID() )
@@ -437,16 +442,9 @@ static void PathForFolderType( char dir[PATH_MAX], OSType folderType )
void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable )
{
CFBundleRef bundle = CFBundleGetMainBundle();
CFURLRef bundleURL = CFBundleCopyBundleURL( bundle );
CFURLRef dirURL = CFURLCreateCopyDeletingLastPathComponent( kCFAllocatorDefault, bundleURL );
char dir[PATH_MAX];
if( !CFURLGetFileSystemRepresentation(dirURL, true, (UInt8 *)dir, sizeof(dir)) )
FAIL_M( "CFURLGetFileSystemRepresentation() failed." );
CFRelease( bundleURL );
CFRelease( dirURL );
FILEMAN->Mount( "dir", dir, "/" );
FILEMAN->Mount( "dir", sDirOfExecutable, "/" );
// /Save -> ~/Library/Application Support/PRODUCT_ID
PathForFolderType( dir, kPreferencesFolderType );