diff options
| author | Brad Linden <brad@lindenlab.com> | 2024-05-23 11:31:19 -0700 | 
|---|---|---|
| committer | Brad Linden <brad@lindenlab.com> | 2024-05-23 11:31:19 -0700 | 
| commit | a1f49564d670a2c41bfa25c833bba2564b9b7f48 (patch) | |
| tree | 1d205e51bc37621916a17d459ad83782fe41f975 /indra/newview/llappviewermacosx.cpp | |
| parent | 6af5db09faf5ea33a2d4c47b64e76f42edae178a (diff) | |
| parent | 6377610f6587989c126b00f490dfc8d527a1c2ce (diff) | |
Merge remote-tracking branch 'origin/DRTVWR-600-maint-A' into brad/merge-maint-a-to-dev
Diffstat (limited to 'indra/newview/llappviewermacosx.cpp')
| -rw-r--r-- | indra/newview/llappviewermacosx.cpp | 332 | 
1 files changed, 166 insertions, 166 deletions
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index f36ccedd45..4162c0479a 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -5,29 +5,29 @@   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$ - */  + */  #include "llviewerprecompiledheaders.h"  #if !defined LL_DARWIN -	#error "Use only with macOS" +    #error "Use only with macOS"  #endif  #define LL_CARBON_CRASH_HANDLER 1 @@ -59,50 +59,50 @@  #include "lldir.h"  #include "lldiriterator.h"  #include <signal.h> -#include <CoreAudio/CoreAudio.h>	// for systemwide mute -class LLMediaCtrl;		// for LLURLDispatcher +#include <CoreAudio/CoreAudio.h>    // for systemwide mute +class LLMediaCtrl;      // for LLURLDispatcher -namespace  +namespace  { -	// The command line args stored. -	// They are not used immediately by the app. -	int gArgC; -	char** gArgV; -	LLAppViewerMacOSX* gViewerAppPtr = NULL; +    // The command line args stored. +    // They are not used immediately by the app. +    int gArgC; +    char** gArgV; +    LLAppViewerMacOSX* gViewerAppPtr = NULL;      std::string gHandleSLURL;  }  void constructViewer()  { -	// Set the working dir to <bundle>/Contents/Resources -	if (chdir(gDirUtilp->getAppRODataDir().c_str()) == -1) -	{ -		LL_WARNS("InitOSX") << "Could not change directory to " -				<< gDirUtilp->getAppRODataDir() << ": " << strerror(errno) -				<< LL_ENDL; -	} - -	gViewerAppPtr = new LLAppViewerMacOSX(); +    // Set the working dir to <bundle>/Contents/Resources +    if (chdir(gDirUtilp->getAppRODataDir().c_str()) == -1) +    { +        LL_WARNS("InitOSX") << "Could not change directory to " +                << gDirUtilp->getAppRODataDir() << ": " << strerror(errno) +                << LL_ENDL; +    } + +    gViewerAppPtr = new LLAppViewerMacOSX();  }  bool initViewer()  { -	bool ok = gViewerAppPtr->init(); -	if(!ok) -	{ -		LL_WARNS("InitOSX") << "Application init failed." << LL_ENDL; -	} -	else if (!gHandleSLURL.empty()) -	{ -		dispatchUrl(gHandleSLURL); -		gHandleSLURL = ""; -	} -	return ok; +    bool ok = gViewerAppPtr->init(); +    if(!ok) +    { +        LL_WARNS("InitOSX") << "Application init failed." << LL_ENDL; +    } +    else if (!gHandleSLURL.empty()) +    { +        dispatchUrl(gHandleSLURL); +        gHandleSLURL = ""; +    } +    return ok;  }  void handleQuit()  { -	LLAppViewer::instance()->userQuit(); +    LLAppViewer::instance()->userQuit();  }  // This function is called pumpMainLoop() rather than runMainLoop() because @@ -112,27 +112,27 @@ void handleQuit()  // (llappdelegate-objc.mm).  bool pumpMainLoop()  { -	bool ret = LLApp::isQuitting(); -	if (!ret && gViewerAppPtr != NULL) -	{ -		ret = gViewerAppPtr->frame(); -	} else { -		ret = true; -	} -	 -	return ret; +    bool ret = LLApp::isQuitting(); +    if (!ret && gViewerAppPtr != NULL) +    { +        ret = gViewerAppPtr->frame(); +    } else { +        ret = true; +    } + +    return ret;  }  void cleanupViewer()  { -	if(!LLApp::isError()) -	{ +    if(!LLApp::isError()) +    {          if (gViewerAppPtr)              gViewerAppPtr->cleanup(); -	} -	 -	delete gViewerAppPtr; -	gViewerAppPtr = NULL; +    } + +    delete gViewerAppPtr; +    gViewerAppPtr = NULL;  }  void clearDumpLogsDir() @@ -197,7 +197,7 @@ CrashMetadataSingleton::CrashMetadataSingleton()          LLStringUtil::replaceChar(agentFullname, '_', ' ');          regionName           = get_metadata(info, "CurrentRegion");          fatalMessage         = get_metadata(info, "FatalMessage"); -         +          if (gDirUtilp->fileExists(gDirUtilp->getDumpLogsDirPath()))          {              LLDirIterator file_iter(gDirUtilp->getDumpLogsDirPath(), "*.log"); @@ -229,12 +229,12 @@ void infos(const std::string& message)      LL_INFOS("InitOSX", "Bugsplat") << message << LL_ENDL;  } -int main( int argc, char **argv )  +int main( int argc, char **argv )  { -	// Store off the command line args for use later. -	gArgC = argc; -	gArgV = argv; -	return createNSApp(argc, (const char**)argv); +    // Store off the command line args for use later. +    gArgC = argc; +    gArgV = argv; +    return createNSApp(argc, (const char**)argv);  }  LLAppViewerMacOSX::LLAppViewerMacOSX() @@ -261,54 +261,54 @@ void LLAppViewerMacOSX::forceErrorOSSpecificException()  // look for this method to be added to the parser in parseAndStoreResults.  std::pair<std::string, std::string> parse_psn(const std::string& s)  { -    if (s.find("-psn_") == 0)  -	{ -		// *FIX:Mani Not sure that the value makes sense. -		// fix it once the actual -psn_XXX syntax is known. -		return std::make_pair("psn", s.substr(5)); +    if (s.find("-psn_") == 0) +    { +        // *FIX:Mani Not sure that the value makes sense. +        // fix it once the actual -psn_XXX syntax is known. +        return std::make_pair("psn", s.substr(5));      } -	else  -	{ +    else +    {          return std::make_pair(std::string(), std::string());      }  }  bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)  { -	// The next two lines add the support for parsing the mac -psn_XXX arg. -	clp.addOptionDesc("psn", NULL, 1, "MacOSX process serial number"); -	clp.setCustomParser(parse_psn); - -	// parse the user's command line -	if(clp.parseCommandLine(gArgC, gArgV) == false) -	{ -		return false; -	} - -	// Get the user's preferred language string based on the Mac OS localization mechanism. -	// To add a new localization: -		// go to the "Resources" section of the project -		// get info on "language.txt" -		// in the "General" tab, click the "Add Localization" button -		// create a new localization for the language you're adding -		// set the contents of the new localization of the file to the string corresponding to our localization -		//   (i.e. "en", "ja", etc.  Use the existing ones as a guide.) -	CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL); -	char path[MAX_PATH]; -	if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path))) -	{ -		std::string lang; -		if(_read_file_into_string(lang, path))		/* Flawfinder: ignore*/ -		{ +    // The next two lines add the support for parsing the mac -psn_XXX arg. +    clp.addOptionDesc("psn", NULL, 1, "MacOSX process serial number"); +    clp.setCustomParser(parse_psn); + +    // parse the user's command line +    if(clp.parseCommandLine(gArgC, gArgV) == false) +    { +        return false; +    } + +    // Get the user's preferred language string based on the Mac OS localization mechanism. +    // To add a new localization: +        // go to the "Resources" section of the project +        // get info on "language.txt" +        // in the "General" tab, click the "Add Localization" button +        // create a new localization for the language you're adding +        // set the contents of the new localization of the file to the string corresponding to our localization +        //   (i.e. "en", "ja", etc.  Use the existing ones as a guide.) +    CFURLRef url = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("language"), CFSTR("txt"), NULL); +    char path[MAX_PATH]; +    if(CFURLGetFileSystemRepresentation(url, false, (UInt8 *)path, sizeof(path))) +    { +        std::string lang; +        if(_read_file_into_string(lang, path))      /* Flawfinder: ignore*/ +        {              LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");              if(c)              {                  c->setValue(lang, false);              } -		} -	} -	CFRelease(url); -	 +        } +    } +    CFRelease(url); +      return true;  } @@ -317,88 +317,88 @@ bool LLAppViewerMacOSX::initParseCommandLine(LLCommandLineParser& clp)  extern void default_unix_signal_handler(int, siginfo_t *, void *);  bool LLAppViewerMacOSX::restoreErrorTrap()  { -	// This method intends to reinstate signal handlers. -	// *NOTE:Mani It was found that the first execution of a shader was overriding -	// our initial signal handlers somehow. -	// This method will be called (at least) once per mainloop execution. -	// *NOTE:Mani The signals used below are copied over from the  -	// setup_signals() func in LLApp.cpp -	// LLApp could use some way of overriding that func, but for this viewer -	// fix I opt to avoid affecting the server code. -	 -	// Set up signal handlers that may result in program termination -	// -	struct sigaction act; -	struct sigaction old_act; -	act.sa_sigaction = default_unix_signal_handler; -	sigemptyset( &act.sa_mask ); -	act.sa_flags = SA_SIGINFO; -	 -	unsigned int reset_count = 0; -	 +    // This method intends to reinstate signal handlers. +    // *NOTE:Mani It was found that the first execution of a shader was overriding +    // our initial signal handlers somehow. +    // This method will be called (at least) once per mainloop execution. +    // *NOTE:Mani The signals used below are copied over from the +    // setup_signals() func in LLApp.cpp +    // LLApp could use some way of overriding that func, but for this viewer +    // fix I opt to avoid affecting the server code. + +    // Set up signal handlers that may result in program termination +    // +    struct sigaction act; +    struct sigaction old_act; +    act.sa_sigaction = default_unix_signal_handler; +    sigemptyset( &act.sa_mask ); +    act.sa_flags = SA_SIGINFO; + +    unsigned int reset_count = 0; +  #define SET_SIG(SIGNAL) sigaction(SIGNAL, &act, &old_act); \                          if(act.sa_sigaction != old_act.sa_sigaction) ++reset_count; -	// Synchronous signals +    // Synchronous signals  #   ifndef LL_BUGSPLAT -	SET_SIG(SIGABRT) // let bugsplat catch this -#   endif         -	SET_SIG(SIGALRM) -	SET_SIG(SIGBUS) -	SET_SIG(SIGFPE) -	SET_SIG(SIGHUP)  -	SET_SIG(SIGILL) -	SET_SIG(SIGPIPE) -	SET_SIG(SIGSEGV) -	SET_SIG(SIGSYS) -	 -	SET_SIG(LL_HEARTBEAT_SIGNAL) -	SET_SIG(LL_SMACKDOWN_SIGNAL) -	 -	// Asynchronous signals that are normally ignored -	SET_SIG(SIGCHLD) -	SET_SIG(SIGUSR2) -	 -	// Asynchronous signals that result in attempted graceful exit -	SET_SIG(SIGHUP) -	SET_SIG(SIGTERM) -	SET_SIG(SIGINT) -	 -	// Asynchronous signals that result in core -	SET_SIG(SIGQUIT)	 +    SET_SIG(SIGABRT) // let bugsplat catch this +#   endif +    SET_SIG(SIGALRM) +    SET_SIG(SIGBUS) +    SET_SIG(SIGFPE) +    SET_SIG(SIGHUP) +    SET_SIG(SIGILL) +    SET_SIG(SIGPIPE) +    SET_SIG(SIGSEGV) +    SET_SIG(SIGSYS) + +    SET_SIG(LL_HEARTBEAT_SIGNAL) +    SET_SIG(LL_SMACKDOWN_SIGNAL) + +    // Asynchronous signals that are normally ignored +    SET_SIG(SIGCHLD) +    SET_SIG(SIGUSR2) + +    // Asynchronous signals that result in attempted graceful exit +    SET_SIG(SIGHUP) +    SET_SIG(SIGTERM) +    SET_SIG(SIGINT) + +    // Asynchronous signals that result in core +    SET_SIG(SIGQUIT)  #undef SET_SIG -	 -	return reset_count == 0; + +    return reset_count == 0;  }  std::string LLAppViewerMacOSX::generateSerialNumber()  { -	char serial_md5[MD5HEX_STR_SIZE];		// Flawfinder: ignore -	serial_md5[0] = 0; - -	// JC: Sample code from http://developer.apple.com/technotes/tn/tn1103.html -	CFStringRef serialNumber = NULL; -	io_service_t    platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, -																 IOServiceMatching("IOPlatformExpertDevice")); -	if (platformExpert) +    char serial_md5[MD5HEX_STR_SIZE];       // Flawfinder: ignore +    serial_md5[0] = 0; + +    // JC: Sample code from http://developer.apple.com/technotes/tn/tn1103.html +    CFStringRef serialNumber = NULL; +    io_service_t    platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault, +                                                                 IOServiceMatching("IOPlatformExpertDevice")); +    if (platformExpert) +    { +        serialNumber = (CFStringRef) IORegistryEntryCreateCFProperty(platformExpert, +                                                                     CFSTR(kIOPlatformSerialNumberKey), +                                                                     kCFAllocatorDefault, 0); +        IOObjectRelease(platformExpert); +    } + +    if (serialNumber)      { -		serialNumber = (CFStringRef) IORegistryEntryCreateCFProperty(platformExpert, -																	 CFSTR(kIOPlatformSerialNumberKey), -																	 kCFAllocatorDefault, 0);		 -		IOObjectRelease(platformExpert); -	} -	 -	if (serialNumber) -	{ -		char buffer[MAX_STRING];		// Flawfinder: ignore -		if (CFStringGetCString(serialNumber, buffer, MAX_STRING, kCFStringEncodingASCII)) -		{ -			LLMD5 md5( (unsigned char*)buffer ); -			md5.hex_digest(serial_md5); -		} -		CFRelease(serialNumber); -	} - -	return serial_md5; +        char buffer[MAX_STRING];        // Flawfinder: ignore +        if (CFStringGetCString(serialNumber, buffer, MAX_STRING, kCFStringEncodingASCII)) +        { +            LLMD5 md5( (unsigned char*)buffer ); +            md5.hex_digest(serial_md5); +        } +        CFRelease(serialNumber); +    } + +    return serial_md5;  }  void handleUrl(const char* url_utf8) @@ -426,7 +426,7 @@ void dispatchUrl(std::string url)      {          url.replace(0, prefix.length(), "secondlife:///app/");      } -     +      LLMediaCtrl* web = NULL;      const bool trusted_browser = false;      LLURLDispatcher::dispatch(url, "", web, trusted_browser);  | 
