diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llplugin/slplugin/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | indra/llplugin/slplugin/slplugin-objc.h | 22 | ||||
| -rw-r--r-- | indra/llplugin/slplugin/slplugin-objc.mm | 101 | ||||
| -rw-r--r-- | indra/llplugin/slplugin/slplugin.cpp | 131 | ||||
| -rw-r--r-- | indra/llvfs/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | indra/llvfs/lldir.h | 6 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.cpp | 2 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.h | 2 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.cpp | 237 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.h | 10 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.cpp | 2 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.h | 2 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.cpp | 2 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.h | 2 | ||||
| -rw-r--r-- | indra/newview/tests/lldir_stub.cpp | 2 | ||||
| -rw-r--r-- | indra/viewer_components/updater/tests/llupdaterservice_test.cpp | 2 | 
16 files changed, 226 insertions, 306 deletions
| diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt index 3fc54573a7..8183467dc5 100644 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -15,7 +15,6 @@ include_directories(  if (DARWIN)      include(CMakeFindFrameworks) -    find_library(CARBON_LIBRARY Carbon)      find_library(COCOA_LIBRARY Cocoa)  endif (DARWIN) @@ -68,7 +67,7 @@ add_dependencies(SLPlugin  if (DARWIN)    # Mac version needs to link against Carbon -  target_link_libraries(SLPlugin ${CARBON_LIBRARY} ${COCOA_LIBRARY}) +  target_link_libraries(SLPlugin ${COCOA_LIBRARY})    # Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later)    add_custom_command(      TARGET SLPlugin POST_BUILD diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h index 602d848f7e..9a8e81873f 100644 --- a/indra/llplugin/slplugin/slplugin-objc.h +++ b/indra/llplugin/slplugin/slplugin-objc.h @@ -28,8 +28,24 @@   * @endcond   */ +//Protos for ObjectiveC classes (cannot import cocoa here due to BOOL conflict) +class NSWindow;  /* Defined in slplugin-objc.mm: */ -void setupCocoa(); -void createAutoReleasePool(); -void deleteAutoReleasePool(); + +class LLCocoaPlugin +{ +public:   +    LLCocoaPlugin(); +    void setupCocoa(); +    void createAutoReleasePool(); +    void deleteAutoReleasePool(); +    void setupGroup(); +    void updateWindows(); +    void processEvents(); +public: +    //EventTargetRef mEventTarget; +    NSWindow* mFrontWindow; +    NSWindow* mPluginWindow; +    int mHackState; +};
\ No newline at end of file diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm index 646416b9d2..a434739350 100644 --- a/indra/llplugin/slplugin/slplugin-objc.mm +++ b/indra/llplugin/slplugin/slplugin-objc.mm @@ -30,11 +30,13 @@  #include <AppKit/AppKit.h> +#import <Cocoa/Cocoa.h>  #include "slplugin-objc.h" +//Note: NSApp is a global defined by cocoa which is an id to the application. -void setupCocoa() +void LLCocoaPlugin::setupCocoa()  {  	static bool inited = false; @@ -56,6 +58,8 @@ void setupCocoa()  		//	Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image  		[[[NSWindow alloc] init] release]; +        mPluginWindow = [NSApp mainWindow]; +          		deleteAutoReleasePool();  		inited = true; @@ -64,7 +68,7 @@ void setupCocoa()  static NSAutoreleasePool *sPool = NULL; -void createAutoReleasePool() +void LLCocoaPlugin::createAutoReleasePool()  {  	if(!sPool)  	{ @@ -72,7 +76,7 @@ void createAutoReleasePool()  	}  } -void deleteAutoReleasePool() +void LLCocoaPlugin::deleteAutoReleasePool()  {  	if(sPool)  	{ @@ -80,3 +84,94 @@ void deleteAutoReleasePool()  		sPool = NULL;  	}  } + +LLCocoaPlugin::LLCocoaPlugin():mHackState(0) +{ +    NSArray* window_list = [NSApp orderedWindows]; +    mFrontWindow = [window_list objectAtIndex:0]; +} + +void LLCocoaPlugin::processEvents() +{ +     // Some plugins (webkit at least) will want an event loop.  This qualifies. +    NSEvent * event; +    event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES]; +    [NSApp sendEvent: event]; +} + + +//Turns out the window ordering stuff never gets hit with any of the current plugins. +//Leaving the following code here 'just in case' for the time being. + +void LLCocoaPlugin::setupGroup() +{ +    //    CreateWindowGroup(kWindowGroupAttrFixedLevel, &layer_group); +    //    if(layer_group) +    //    { +    //        // Start out with a window layer that's way out in front (fixes the problem with the menubar not getting hidden on first switch to fullscreen youtube) +    //        SetWindowGroupName(layer_group, CFSTR("SLPlugin Layer")); +    //        SetWindowGroupLevel(layer_group, kCGOverlayWindowLevel);		 +    //    } +     +} + +void LLCocoaPlugin::updateWindows()  //SPATTERS give this a better name. +{ +//    NSArray* window_list = [NSApp orderedWindows]; +//    NSWindow* current_window = [window_list objectAtIndex:0]; +//    NSWindow* parent_window = [ current_window parentWindow ]; +//    bool this_is_front_process = false; +//    bool parent_is_front_process = false; +// +//     +//    // Check for a change in this process's frontmost window. +//    if ( current_window != mFrontWindow ) +//    { +//        // and figure out whether this process or its parent are currently frontmost +//        if ( current_window == parent_window ) parent_is_front_process = true; +//        if ( current_window == mPluginWindow ) this_is_front_process = true; +//     +//        if (current_window != NULL && mFrontWindow == NULL) +//        { +//            // Opening the first window +//             +//            if(mHackState == 0) +//            { +//                // Next time through the event loop, lower the window group layer +//                mHackState = 1; +//            } +//             +//            if(parent_is_front_process) +//            { +//                // Bring this process's windows to the front. +//                [mPluginWindow makeKeyAndOrderFront:NSApp]; +//                [mPluginWindow setOrderedIndex:0]; +//            } +//             +//            [NSApp activateIgnoringOtherApps:YES]; +//        } +//         +//        else if (( current_window == NULL) && (mFrontWindow != NULL)) +//        { +//            // Closing the last window +//             +//            if(this_is_front_process) +//            { +//                // Try to bring this process's parent to the front +//                [parent_window makeKeyAndOrderFront:NSApp]; +//                [parent_window setOrderedIndex:0]; +//            } +//        } +//        else if(mHackState == 1) +//        { +////            if(layer_group) +////            { +////                // Set the window group level back to something less extreme +////                SetWindowGroupLevel(layer_group, kCGNormalWindowLevel); +////            } +//            mHackState = 2; +//        } +//         +//        mFrontWindow = [window_list objectAtIndex:0]; +//    } + } diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 516a58db88..6c9ba0ae52 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -37,8 +37,12 @@  #include "llapr.h"  #include "llstring.h" +#include <iostream> +#include <fstream> +using namespace std; + +  #if LL_DARWIN -	#include <Carbon/Carbon.h>  	#include "slplugin-objc.h"  #endif @@ -176,6 +180,7 @@ int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL  int main(int argc, char **argv)  #endif  { +  	ll_init_apr();  	// Set up llerror logging @@ -216,26 +221,25 @@ int main(int argc, char **argv)  	// Catch signals that most kinds of crashes will generate, and exit cleanly so the system crash dialog isn't shown.  	signal(SIGILL, &crash_handler);		// illegal instruction -# if LL_DARWIN -	signal(SIGEMT, &crash_handler);		// emulate instruction executed -# endif // LL_DARWIN  	signal(SIGFPE, &crash_handler);		// floating-point exception  	signal(SIGBUS, &crash_handler);		// bus error  	signal(SIGSEGV, &crash_handler);	// segmentation violation  	signal(SIGSYS, &crash_handler);		// non-existent system call invoked  #endif +# if LL_DARWIN +	signal(SIGEMT, &crash_handler);		// emulate instruction executed -#if LL_DARWIN -	setupCocoa(); -	createAutoReleasePool(); -#endif +    LLCocoaPlugin cocoa_interface; +	cocoa_interface.setupCocoa(); +	cocoa_interface.createAutoReleasePool(); +#endif //LL_DARWIN  	LLPluginProcessChild *plugin = new LLPluginProcessChild();  	plugin->init(port);  #if LL_DARWIN -		deleteAutoReleasePool(); +    cocoa_interface.deleteAutoReleasePool();  #endif  	LLTimer timer; @@ -246,114 +250,22 @@ int main(int argc, char **argv)  #endif  #if LL_DARWIN +      	// If the plugin opens a new window (such as the Flash plugin's fullscreen player), we may need to bring this plugin process to the foreground.  	// Use this to track the current frontmost window and bring this process to the front if it changes. -	WindowRef front_window = NULL; -	WindowGroupRef layer_group = NULL; -	int window_hack_state = 0; -	CreateWindowGroup(kWindowGroupAttrFixedLevel, &layer_group); -	if(layer_group) -	{ -		// Start out with a window layer that's way out in front (fixes the problem with the menubar not getting hidden on first switch to fullscreen youtube) -		SetWindowGroupName(layer_group, CFSTR("SLPlugin Layer")); -		SetWindowGroupLevel(layer_group, kCGOverlayWindowLevel);		 -	} -#endif - -#if LL_DARWIN -	EventTargetRef event_target = GetEventDispatcherTarget(); + //   cocoa_interface.mEventTarget = GetEventDispatcherTarget();  #endif  	while(!plugin->isDone())  	{  #if LL_DARWIN -		createAutoReleasePool(); +		cocoa_interface.createAutoReleasePool();  #endif  		timer.reset();  		plugin->idle();  #if LL_DARWIN  		{ -			// Some plugins (webkit at least) will want an event loop.  This qualifies. -			EventRef event; -			if(ReceiveNextEvent(0, 0, kEventDurationNoWait, true, &event) == noErr) -			{ -				SendEventToEventTarget (event, event_target); -				ReleaseEvent(event); -			} -			 -			// Check for a change in this process's frontmost window. -			if(GetFrontWindowOfClass(kAllWindowClasses, true) != front_window) -			{ -				ProcessSerialNumber self = { 0, kCurrentProcess }; -				ProcessSerialNumber parent = { 0, kNoProcess }; -				ProcessSerialNumber front = { 0, kNoProcess }; -				Boolean this_is_front_process = false; -				Boolean parent_is_front_process = false; -				{ -					// Get this process's parent -					ProcessInfoRec info; -					info.processInfoLength = sizeof(ProcessInfoRec); -					info.processName = NULL; -					info.processAppSpec = NULL; -					if(GetProcessInformation( &self, &info ) == noErr) -					{ -						parent = info.processLauncher; -					} -					 -					// and figure out whether this process or its parent are currently frontmost -					if(GetFrontProcess(&front) == noErr) -					{ -						(void) SameProcess(&self, &front, &this_is_front_process); -						(void) SameProcess(&parent, &front, &parent_is_front_process); -					} -				} -								 -				if((GetFrontWindowOfClass(kAllWindowClasses, true) != NULL) && (front_window == NULL)) -				{ -					// Opening the first window -					 -					if(window_hack_state == 0) -					{ -						// Next time through the event loop, lower the window group layer -						window_hack_state = 1; -					} - -					if(layer_group) -					{ -						SetWindowGroup(GetFrontWindowOfClass(kAllWindowClasses, true), layer_group); -					} -					 -					if(parent_is_front_process) -					{ -						// Bring this process's windows to the front. -						(void) SetFrontProcess( &self ); -					} - -					ActivateWindow(GetFrontWindowOfClass(kAllWindowClasses, true), true); -				} -				else if((GetFrontWindowOfClass(kAllWindowClasses, true) == NULL) && (front_window != NULL)) -				{ -					// Closing the last window -					 -					if(this_is_front_process) -					{ -						// Try to bring this process's parent to the front -						(void) SetFrontProcess(&parent); -					} -				} -				else if(window_hack_state == 1) -				{ -					if(layer_group) -					{ -						// Set the window group level back to something less extreme -						SetWindowGroupLevel(layer_group, kCGNormalWindowLevel); -					} -					window_hack_state = 2; -				} - -				front_window = GetFrontWindowOfClass(kAllWindowClasses, true); - -			} -		} +			cocoa_interface.processEvents(); +        }  #endif  		F64 elapsed = timer.getElapsedTimeF64();  		F64 remaining = plugin->getSleepTime() - elapsed; @@ -377,7 +289,8 @@ int main(int argc, char **argv)  //			LL_INFOS("slplugin") << "slept for "<< timer.getElapsedTimeF64() * 1000.0f << " ms" <<  LL_ENDL;  		} - +         +          #if LL_WINDOWS  	// More agressive checking of interfering exception handlers.  	// Doesn't appear to be required so far - even for plugins @@ -387,14 +300,14 @@ int main(int argc, char **argv)  #endif  #if LL_DARWIN -		deleteAutoReleasePool(); +		cocoa_interface.deleteAutoReleasePool();  #endif  	} -  	delete plugin;  	ll_cleanup_apr(); +  	return 0;  } diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt index a819d12861..3c68b279f7 100644 --- a/indra/llvfs/CMakeLists.txt +++ b/indra/llvfs/CMakeLists.txt @@ -36,6 +36,8 @@ set(llvfs_HEADER_FILES  if (DARWIN)    LIST(APPEND llvfs_SOURCE_FILES lldir_mac.cpp)    LIST(APPEND llvfs_HEADER_FILES lldir_mac.h) +  LIST(APPEND llvfs_SOURCE_FILES llvfs_objc.mm) +  LIST(APPEND llvfs_HEADER_FILES llvfs_objc.h)  endif (DARWIN)  if (LINUX) @@ -73,8 +75,8 @@ target_link_libraries(llvfs  if (DARWIN)    include(CMakeFindFrameworks) -  find_library(CARBON_LIBRARY Carbon) -  target_link_libraries(llvfs ${CARBON_LIBRARY}) +  find_library(COCOA_LIBRARY Cocoa) +  target_link_libraries(llvfs ${COCOA_LIBRARY})  endif (DARWIN) diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index 5ee8bdb542..35b2654ae7 100644 --- a/indra/llvfs/lldir.h +++ b/indra/llvfs/lldir.h @@ -1,4 +1,4 @@ -/**  +/**     * @file lldir.h   * @brief Definition of directory utilities class   * @@ -73,10 +73,8 @@ class LLDir  	virtual S32 deleteFilesInDir(const std::string &dirname, const std::string &mask);  // pure virtual functions -	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask) = 0; -  	virtual std::string getCurPath() = 0; -	virtual BOOL fileExists(const std::string &filename) const = 0; +	virtual bool fileExists(const std::string &filename) const = 0;  	const std::string findFile(const std::string& filename, const std::vector<std::string> filenames) const;   	const std::string findFile(const std::string& filename, const std::string& searchPath1 = "", const std::string& searchPath2 = "", const std::string& searchPath3 = "") const; diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp index 407f3b93fb..4edd078640 100644 --- a/indra/llvfs/lldir_linux.cpp +++ b/indra/llvfs/lldir_linux.cpp @@ -254,7 +254,7 @@ std::string LLDir_Linux::getCurPath()  } -BOOL LLDir_Linux::fileExists(const std::string &filename) const +bool LLDir_Linux::fileExists(const std::string &filename) const  {  	struct stat stat_data;  	// Check the age of the file diff --git a/indra/llvfs/lldir_linux.h b/indra/llvfs/lldir_linux.h index 7603239867..e83a020ba4 100644 --- a/indra/llvfs/lldir_linux.h +++ b/indra/llvfs/lldir_linux.h @@ -47,7 +47,7 @@ public:  	virtual std::string getCurPath();  	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); -	/*virtual*/ BOOL fileExists(const std::string &filename) const; +	/*virtual*/ bool fileExists(const std::string &filename) const;  	/*virtual*/ std::string getLLPluginLauncher();  	/*virtual*/ std::string getLLPluginFilename(std::string base_name); diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp index 489bc3e4a7..75b3d56ebc 100644 --- a/indra/llvfs/lldir_mac.cpp +++ b/indra/llvfs/lldir_mac.cpp @@ -22,7 +22,7 @@   *    * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$ - */ + */   #if LL_DARWIN @@ -35,73 +35,27 @@  #include <sys/stat.h>  #include <unistd.h>  #include <glob.h> - -#include <Carbon/Carbon.h> - -// -------------------------------------------------------------------------------- - -static OSStatus CFCreateDirectory(FSRef	*parentRef, CFStringRef name, FSRef *newRef) -{ -	OSStatus		result = noErr; -	HFSUniStr255	uniStr; -	 -	uniStr.length = CFStringGetLength(name); -	CFStringGetCharacters(name, CFRangeMake(0, uniStr.length), uniStr.unicode); -	result = FSMakeFSRefUnicode(parentRef, uniStr.length, uniStr.unicode, kTextEncodingMacRoman, newRef); -	if (result != noErr) -	{ -		result = FSCreateDirectoryUnicode(parentRef, uniStr.length, uniStr.unicode, 0, NULL, newRef, NULL, NULL); -	} - -	return result; -} +#include <boost/filesystem.hpp> +#include "llvfs_objc.h"  // -------------------------------------------------------------------------------- -static void CFStringRefToLLString(CFStringRef stringRef, std::string &llString, bool releaseWhenDone) +static bool CreateDirectory(const std::string &parent,  +                            const std::string &child, +                            std::string *fullname)  { -	if (stringRef) -	{ -		long stringSize = CFStringGetLength(stringRef) + 1; -		long bufferSize = CFStringGetMaximumSizeForEncoding(stringSize,kCFStringEncodingUTF8); -		char* buffer = new char[bufferSize]; -		memset(buffer, 0, bufferSize); -		if (CFStringGetCString(stringRef, buffer, bufferSize, kCFStringEncodingUTF8)) -			llString = buffer; -		delete[] buffer; -		if (releaseWhenDone) -			CFRelease(stringRef); -	} -} - -// -------------------------------------------------------------------------------- - -static void CFURLRefToLLString(CFURLRef urlRef, std::string &llString, bool releaseWhenDone) -{ -	if (urlRef) -	{ -		CFURLRef	absoluteURLRef = CFURLCopyAbsoluteURL(urlRef); -		if (absoluteURLRef) -		{ -			CFStringRef	stringRef = CFURLCopyFileSystemPath(absoluteURLRef, kCFURLPOSIXPathStyle); -			CFStringRefToLLString(stringRef, llString, true); -			CFRelease(absoluteURLRef); -		} -		if (releaseWhenDone) -			CFRelease(urlRef); -	} -} - -// -------------------------------------------------------------------------------- - -static void FSRefToLLString(FSRef *fsRef, std::string &llString) -{ -	OSStatus	error = noErr; -	char		path[MAX_PATH]; -	 -	error = FSRefMakePath(fsRef, (UInt8*) path, sizeof(path)); -	if (error == noErr) -		llString = path; +     +    boost::filesystem::path p(parent); +    p /= child; +     +    if (fullname) +        *fullname = std::string(p.string()); +     +    if (! boost::filesystem::create_directory(p)) +    { +        return (boost::filesystem::is_directory(p)); +    } +    return true;  }  // -------------------------------------------------------------------------------- @@ -109,35 +63,26 @@ static void FSRefToLLString(FSRef *fsRef, std::string &llString)  LLDir_Mac::LLDir_Mac()  {  	mDirDelimiter = "/"; -	mCurrentDirIndex = -1; -	mCurrentDirCount = -1; -	 -	CFBundleRef		mainBundleRef = NULL; -	CFURLRef		executableURLRef = NULL; -	CFStringRef		stringRef = NULL; -	OSStatus		error = noErr; -	FSRef			fileRef; -	CFStringRef		secondLifeString = CFSTR("SecondLife"); -	 -	mainBundleRef = CFBundleGetMainBundle(); -		 -	executableURLRef = CFBundleCopyExecutableURL(mainBundleRef); -	 -	if (executableURLRef != NULL) + +    const std::string     secondLifeString = "SecondLife"; +     +    std::string *executablepathstr = getSystemExecutableFolder(); + +    //NOTE:  LLINFOS/LLERRS will not output to log here.  The streams are not initialized. +     +	if (executablepathstr)  	{  		// mExecutablePathAndName -		CFURLRefToLLString(executableURLRef, mExecutablePathAndName, false); -		 -		// mExecutableFilename -		stringRef = CFURLCopyLastPathComponent(executableURLRef); -		CFStringRefToLLString(stringRef, mExecutableFilename, true); -		 -		// mExecutableDir -		CFURLRef	executableParentURLRef = CFURLCreateCopyDeletingLastPathComponent(NULL, executableURLRef); -		CFURLRefToLLString(executableParentURLRef, mExecutableDir, true); +		mExecutablePathAndName = *executablepathstr; +         +        boost::filesystem::path executablepath(*executablepathstr); +         +        mExecutableFilename = executablepath.filename(); +        mExecutableDir = executablepath.parent_path().string();  		// mAppRODataDir - +        std::string *resourcepath = getSystemResourceFolder(); +        mAppRODataDir = *resourcepath;  		// *NOTE: When running in a dev tree, use the copy of  		// skins in indra/newview/ rather than in the application bundle.  This @@ -146,10 +91,7 @@ LLDir_Mac::LLDir_Mac()  		// MBW -- This keeps the mac application from finding other things.  		// If this is really for skins, it should JUST apply to skins. - -		CFURLRef resourcesURLRef = CFBundleCopyResourcesDirectoryURL(mainBundleRef); -		CFURLRefToLLString(resourcesURLRef, mAppRODataDir, true); -		 +          		U32 build_dir_pos = mExecutableDir.rfind("/build-darwin-");  		if (build_dir_pos != std::string::npos)  		{ @@ -166,55 +108,50 @@ LLDir_Mac::LLDir_Mac()  		}  		// mOSUserDir -		error = FSFindFolder(kUserDomain, kApplicationSupportFolderType, true, &fileRef); -		if (error == noErr) -		{ -			FSRef	newFileRef; -			 -			// Create the directory -			error = CFCreateDirectory(&fileRef, secondLifeString, &newFileRef); -			if (error == noErr) -			{ -				// Save the full path to the folder -				FSRefToLLString(&newFileRef, mOSUserDir); -				 -				// Create our sub-dirs -				(void) CFCreateDirectory(&newFileRef, CFSTR("data"), NULL); -				//(void) CFCreateDirectory(&newFileRef, CFSTR("cache"), NULL); -				(void) CFCreateDirectory(&newFileRef, CFSTR("logs"), NULL); -				(void) CFCreateDirectory(&newFileRef, CFSTR("user_settings"), NULL); -				(void) CFCreateDirectory(&newFileRef, CFSTR("browser_profile"), NULL); -			} -		} -		 +        std::string *appdir = getSystemApplicationSupportFolder(); +        std::string rootdir; + +        //Create root directory +        if (CreateDirectory(*appdir, secondLifeString, &rootdir)) +        { +             +            // Save the full path to the folder +            mOSUserDir = rootdir; +             +            // Create our sub-dirs +            CreateDirectory(rootdir, std::string("data"), NULL); +            CreateDirectory(rootdir, std::string("logs"), NULL); +            CreateDirectory(rootdir, std::string("user_settings"), NULL); +            CreateDirectory(rootdir, std::string("browser_profile"), NULL); +        } +      		//mOSCacheDir -		FSRef cacheDirRef; -		error = FSFindFolder(kUserDomain, kCachedDataFolderType, true, &cacheDirRef); -		if (error == noErr) +        std::string *cachedir =  getSystemCacheFolder(); + +        if (cachedir) +		  		{ -			FSRefToLLString(&cacheDirRef, mOSCacheDir); -			(void)CFCreateDirectory(&cacheDirRef, CFSTR("SecondLife"),NULL); +            mOSCacheDir = *cachedir; +            //SPATTERS TODO:  This changes from ~/Library/Cache/Secondlife to ~/Library/Cache/com.app.secondlife/Secondlife.  Last dir level could go away. +            CreateDirectory(mOSCacheDir, secondLifeString, NULL);  		}  		// mOSUserAppDir  		mOSUserAppDir = mOSUserDir;  		// mTempDir -		error = FSFindFolder(kOnAppropriateDisk, kTemporaryFolderType, true, &fileRef); -		if (error == noErr) -		{ -			FSRef	tempRef; -			error = CFCreateDirectory(&fileRef, secondLifeString, &tempRef); -			if (error == noErr) -				FSRefToLLString(&tempRef, mTempDir); -		} +        //Aura 120920 boost::filesystem::temp_directory_path() not yet implemented on mac. :( +        std::string *tmpdir = getSystemTempFolder(); +        if (tmpdir) +        { +             +            CreateDirectory(*tmpdir, secondLifeString, &mTempDir); +            if (tmpdir) delete tmpdir; +        }  		mWorkingDir = getCurPath();  		mLLPluginDir = mAppRODataDir + mDirDelimiter + "llplugin"; -				 -		CFRelease(executableURLRef); -		executableURLRef = NULL;  	}  } @@ -235,52 +172,18 @@ void LLDir_Mac::initAppDirs(const std::string &app_name,  		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";  	}  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem"); - -	//dumpCurrentDirectories(); -} - -U32 LLDir_Mac::countFilesInDir(const std::string &dirname, const std::string &mask) -{ -	U32 file_count = 0; -	glob_t g; - -	std::string tmp_str; -	tmp_str = dirname; -	tmp_str += mask; -	 -	if(glob(tmp_str.c_str(), GLOB_NOSORT, NULL, &g) == 0) -	{ -		file_count = g.gl_pathc; - -		globfree(&g); -	} - -	return (file_count);  }  std::string LLDir_Mac::getCurPath()  { -	char tmp_str[LL_MAX_PATH];	/* Flawfinder: ignore */  -	getcwd(tmp_str, LL_MAX_PATH); -	return tmp_str; +	return boost::filesystem::path( boost::filesystem::current_path() ).string();  } -BOOL LLDir_Mac::fileExists(const std::string &filename) const +bool LLDir_Mac::fileExists(const std::string &filename) const  { -	struct stat stat_data; -	// Check the age of the file -	// Now, we see if the files we've gathered are recent... -	int res = stat(filename.c_str(), &stat_data); -	if (!res) -	{ -		return TRUE; -	} -	else -	{ -		return FALSE; -	} +    return boost::filesystem::exists(filename);  } diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h index d190d70be4..558727ebbc 100644 --- a/indra/llvfs/lldir_mac.h +++ b/indra/llvfs/lldir_mac.h @@ -22,7 +22,7 @@   *    * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$ - */ + */   #if !LL_DARWIN  #error This header must not be included when compiling for any target other than Mac OS. Consider including lldir.h instead. @@ -45,16 +45,10 @@ public:  		const std::string& app_read_only_data_dir);  	virtual std::string getCurPath(); -	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); -	virtual BOOL fileExists(const std::string &filename) const; +	virtual bool fileExists(const std::string &filename) const;  	/*virtual*/ std::string getLLPluginLauncher();  	/*virtual*/ std::string getLLPluginFilename(std::string base_name); - -private: -	int mCurrentDirIndex; -	int mCurrentDirCount; -	std::string mCurrentDir;  };  #endif // LL_LLDIR_MAC_H diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index 21f8c3acdb..a97d72d539 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -272,7 +272,7 @@ std::string LLDir_Solaris::getCurPath()  } -BOOL LLDir_Solaris::fileExists(const std::string &filename) const +bool LLDir_Solaris::fileExists(const std::string &filename) const  {  	struct stat stat_data;  	// Check the age of the file diff --git a/indra/llvfs/lldir_solaris.h b/indra/llvfs/lldir_solaris.h index 0b58a45b15..c6dac57e14 100644 --- a/indra/llvfs/lldir_solaris.h +++ b/indra/llvfs/lldir_solaris.h @@ -47,7 +47,7 @@ public:  	virtual std::string getCurPath();  	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); -	/*virtual*/ BOOL fileExists(const std::string &filename) const; +	/*virtual*/ bool fileExists(const std::string &filename) const;  private:  	DIR *mDirp; diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index 7709945123..462d1cce06 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -249,7 +249,7 @@ std::string LLDir_Win32::getCurPath()  } -BOOL LLDir_Win32::fileExists(const std::string &filename) const +bool LLDir_Win32::fileExists(const std::string &filename) const  {  	llstat stat_data;  	// Check the age of the file diff --git a/indra/llvfs/lldir_win32.h b/indra/llvfs/lldir_win32.h index 62fb4713ab..450efaf9da 100644 --- a/indra/llvfs/lldir_win32.h +++ b/indra/llvfs/lldir_win32.h @@ -44,7 +44,7 @@ public:  	/*virtual*/ std::string getCurPath();  	/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask); -	/*virtual*/ BOOL fileExists(const std::string &filename) const; +	/*virtual*/ bool fileExists(const std::string &filename) const;  	/*virtual*/ std::string getLLPluginLauncher();  	/*virtual*/ std::string getLLPluginFilename(std::string base_name); diff --git a/indra/newview/tests/lldir_stub.cpp b/indra/newview/tests/lldir_stub.cpp index 18cf4e7419..88f063f009 100644 --- a/indra/newview/tests/lldir_stub.cpp +++ b/indra/newview/tests/lldir_stub.cpp @@ -48,7 +48,7 @@ public:  	/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask) { return 42; }  	/*virtual*/ BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname, BOOL wrap) { fname = fname + "_NEXT"; return false; }  	/*virtual*/ void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname) { fname = "RANDOM_FILE"; } -	/*virtual*/ BOOL fileExists(const std::string &filename) const { return false; } +	/*virtual*/ bool fileExists(const std::string &filename) const { return false; }  };  LLDir_stub gDirUtil; diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index 7c016fecf9..f0d3fcbd07 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -63,7 +63,7 @@ class LLDir_Mock : public LLDir  							const std::string &mask,   							std::string &fname) {}  	std::string getCurPath() { return ""; } -	BOOL fileExists(const std::string &filename) const { return false; } +	bool fileExists(const std::string &filename) const { return false; }  	std::string getLLPluginLauncher() { return ""; }  	std::string getLLPluginFilename(std::string base_name) { return ""; } | 
