diff options
| author | Bryan O'Sullivan <bos@lindenlab.com> | 2009-08-31 13:47:47 -0700 | 
|---|---|---|
| committer | Bryan O'Sullivan <bos@lindenlab.com> | 2009-08-31 13:47:47 -0700 | 
| commit | 30ff6cabd61f2f083df5df1e6e70cc94742af477 (patch) | |
| tree | 631935f1cf59d19a91cdad65e9a75fe825afda7d /indra/llvfs | |
| parent | ff11d74820c89822cd067b51727d9df1dc87d0d0 (diff) | |
| parent | 3ac3a4b206c08ed06b889bdaa24074b6aa0e020a (diff) | |
Merge with trunk
Diffstat (limited to 'indra/llvfs')
| -rw-r--r-- | indra/llvfs/lldir.cpp | 78 | ||||
| -rw-r--r-- | indra/llvfs/lldir.h | 41 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.cpp | 24 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.h | 6 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.cpp | 51 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.h | 6 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.cpp | 10 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.h | 3 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.cpp | 34 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.h | 6 | ||||
| -rw-r--r-- | indra/llvfs/lllfsthread.h | 2 | ||||
| -rwxr-xr-x | indra/llvfs/llpidlock.cpp | 7 | ||||
| -rwxr-xr-x | indra/llvfs/llpidlock.h | 7 | ||||
| -rw-r--r-- | indra/llvfs/llvfile.cpp | 6 | ||||
| -rw-r--r-- | indra/llvfs/llvfs.cpp | 2 | 
15 files changed, 218 insertions, 65 deletions
| diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index d6a6eca341..745e53c980 100644 --- a/indra/llvfs/lldir.cpp +++ b/indra/llvfs/lldir.cpp @@ -41,7 +41,9 @@  #endif  #include "lldir.h" +  #include "llerror.h" +#include "lltimer.h"	// ms_sleep()  #include "lluuid.h"  #if LL_WINDOWS @@ -125,16 +127,20 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask)  }  const std::string LLDir::findFile(const std::string &filename,  -						   const std::string searchPath1,  -						   const std::string searchPath2,  -						   const std::string searchPath3) const +						   const std::string& searchPath1,  +						   const std::string& searchPath2,  +						   const std::string& searchPath3) const  {  	std::vector<std::string> search_paths;  	search_paths.push_back(searchPath1);  	search_paths.push_back(searchPath2);  	search_paths.push_back(searchPath3); +	return findFile(filename, search_paths); +} -	std::vector<std::string>::iterator search_path_iter; +const std::string LLDir::findFile(const std::string& filename, const std::vector<std::string> search_paths) const +{ +	std::vector<std::string>::const_iterator search_path_iter;  	for (search_path_iter = search_paths.begin();  		search_path_iter != search_paths.end();  		++search_path_iter) @@ -287,13 +293,13 @@ const std::string& LLDir::getDefaultSkinDir() const  const std::string LLDir::getSkinBaseDir() const  { -	std::string dir = getAppRODataDir(); -	dir += mDirDelimiter; -	dir += "skins"; - -	return dir; +	return mSkinBaseDir;  } +const std::string &LLDir::getLLPluginDir() const +{ +	return mLLPluginDir; +}  std::string LLDir::getExpandedFilename(ELLPath location, const std::string& filename) const  { @@ -319,19 +325,13 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd  		prefix += mDirDelimiter;  		prefix += "app_settings";  		break; -		 +	  	case LL_PATH_CHARACTER:  		prefix = getAppRODataDir();  		prefix += mDirDelimiter;  		prefix += "character";  		break; -	case LL_PATH_MOTIONS: -		prefix = getAppRODataDir(); -		prefix += mDirDelimiter; -		prefix += "motions"; -		break; -		  	case LL_PATH_HELP:  		prefix = "help";  		break; @@ -372,17 +372,27 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd  		prefix = getSkinDir();  		break; -	case LL_PATH_SKINS: -		prefix = getAppRODataDir(); +	case LL_PATH_DEFAULT_SKIN: +		prefix = getDefaultSkinDir(); +		break; + +	case LL_PATH_USER_SKIN: +		prefix = getOSUserAppDir(); +		prefix += mDirDelimiter; +		prefix += "user_settings";  		prefix += mDirDelimiter;  		prefix += "skins";  		break; -	//case LL_PATH_HTML: -	//	prefix = getSkinDir(); -	//	prefix += mDirDelimiter; -	//	prefix += "html"; -	//	break; +	case LL_PATH_SKINS: +		prefix = getSkinBaseDir(); +		break; + +	case LL_PATH_LOCAL_ASSETS: +		prefix = getAppRODataDir(); +		prefix += mDirDelimiter; +		prefix += "local_assets"; +		break;  	case LL_PATH_MOZILLA_PROFILE:  		prefix = getOSUserAppDir(); @@ -465,6 +475,8 @@ std::string LLDir::getDirName(const std::string& filepath) const  std::string LLDir::getExtension(const std::string& filepath) const  { +	if (filepath.empty()) +		return std::string();  	std::string basename = getBaseFileName(filepath, false);  	std::size_t offset = basename.find_last_of('.');  	std::string exten = (offset == std::string::npos || offset == 0) ? "" : basename.substr(offset+1); @@ -488,11 +500,14 @@ std::string LLDir::findSkinnedFilename(const std::string &subdir1, const std::st  	std::string subdirs = ((subdir1.empty() ? "" : mDirDelimiter) + subdir1)  						 + ((subdir2.empty() ? "" : mDirDelimiter) + subdir2); -	std::string found_file = findFile(filename, -		getUserSkinDir() + subdirs,		// first look in user skin override -		getSkinDir() + subdirs,			// then in current skin -		getDefaultSkinDir() + subdirs); // and last in default skin +	std::vector<std::string> search_paths; +	 +	search_paths.push_back(getUserSkinDir() + subdirs);		// first look in user skin override +	search_paths.push_back(getSkinDir() + subdirs);			// then in current skin +	search_paths.push_back(getDefaultSkinDir() + subdirs);  // then default skin +	search_paths.push_back(getCacheDir() + subdirs);		// and last in preload directory +	std::string found_file = findFile(filename, search_paths);  	return found_file;  } @@ -597,9 +612,7 @@ void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string  void LLDir::setSkinFolder(const std::string &skin_folder)  { -	mSkinDir = getAppRODataDir(); -	mSkinDir += mDirDelimiter; -	mSkinDir += "skins"; +	mSkinDir = getSkinBaseDir();  	mSkinDir += mDirDelimiter;  	mSkinDir += skin_folder; @@ -613,9 +626,7 @@ void LLDir::setSkinFolder(const std::string &skin_folder)  	// base skin which is used as fallback for all skinned files  	// e.g. c:\program files\secondlife\skins\default -	mDefaultSkinDir = getAppRODataDir(); -	mDefaultSkinDir += mDirDelimiter; -	mDefaultSkinDir += "skins"; +	mDefaultSkinDir = getSkinBaseDir();  	mDefaultSkinDir += mDirDelimiter;	  	mDefaultSkinDir += "default";  } @@ -660,6 +671,7 @@ void LLDir::dumpCurrentDirectories()  	LL_DEBUGS2("AppInit","Directories") << "  LindenUserDir:         " << getLindenUserDir() << LL_ENDL;  	LL_DEBUGS2("AppInit","Directories") << "  TempDir:               " << getTempDir() << LL_ENDL;  	LL_DEBUGS2("AppInit","Directories") << "  CAFile:				 " << getCAFile() << LL_ENDL; +	LL_DEBUGS2("AppInit","Directories") << "  SkinBaseDir:           " << getSkinBaseDir() << LL_ENDL;  	LL_DEBUGS2("AppInit","Directories") << "  SkinDir:               " << getSkinDir() << LL_ENDL;  #if LL_LIBXUL_ENABLED diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index 760b6512a5..6c9fea6b6a 100644 --- a/indra/llvfs/lldir.h +++ b/indra/llvfs/lldir.h @@ -47,17 +47,19 @@ typedef enum ELLPath  	LL_PATH_PER_SL_ACCOUNT = 3,	  	LL_PATH_CACHE = 4,	  	LL_PATH_CHARACTER = 5,	 -	LL_PATH_MOTIONS = 6, -	LL_PATH_HELP = 7,		 -	LL_PATH_LOGS = 8, -	LL_PATH_TEMP = 9, -	LL_PATH_SKINS = 10, -	LL_PATH_TOP_SKIN = 11, -	LL_PATH_CHAT_LOGS = 12, -	LL_PATH_PER_ACCOUNT_CHAT_LOGS = 13, -	LL_PATH_MOZILLA_PROFILE = 14, -//	LL_PATH_HTML = 15, +	LL_PATH_HELP = 6,		 +	LL_PATH_LOGS = 7, +	LL_PATH_TEMP = 8, +	LL_PATH_SKINS = 9, +	LL_PATH_TOP_SKIN = 10, +	LL_PATH_CHAT_LOGS = 11, +	LL_PATH_PER_ACCOUNT_CHAT_LOGS = 12, +	LL_PATH_MOZILLA_PROFILE = 13, +	LL_PATH_USER_SKIN = 14, +	LL_PATH_LOCAL_ASSETS = 15, +//	LL_PATH_HTML = 16,  	LL_PATH_EXECUTABLE = 16, +	LL_PATH_DEFAULT_SKIN = 17,  	LL_PATH_LAST  } ELLPath; @@ -68,8 +70,13 @@ class LLDir  	LLDir();  	virtual ~LLDir(); -	virtual void initAppDirs(const std::string &app_name) = 0; - public:	 +	// app_name - Usually SecondLife, used for creating settings directories +	// in OS-specific location, such as C:\Documents and Settings +	// app_read_only_data_dir - Usually the source code directory, used +	// for test applications to read newview data files. +	virtual void initAppDirs(const std::string &app_name,  +		const std::string& app_read_only_data_dir = "") = 0; +  	virtual S32 deleteFilesInDir(const std::string &dirname, const std::string &mask);  // pure virtual functions @@ -79,7 +86,12 @@ class LLDir  	virtual std::string getCurPath() = 0;  	virtual BOOL fileExists(const std::string &filename) const = 0; -	const std::string findFile(const std::string &filename, const std::string searchPath1 = "", const std::string searchPath2 = "", const std::string searchPath3 = "") const; +	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; + +	virtual std::string getLLPluginLauncher() = 0; // full path and name for the plugin shell +	virtual std::string getLLPluginFilename(std::string base_name) = 0; // full path and name to the plugin DSO for this base_name (i.e. 'FOO' -> '/bar/baz/libFOO.so') +  	const std::string &getExecutablePathAndName() const;	// Full pathname of the executable  	const std::string &getAppName() const;			// install directory under progams/ ie "SecondLife"  	const std::string &getExecutableDir() const;	// Directory where the executable is located @@ -100,6 +112,7 @@ class LLDir  	const std::string &getUserSkinDir() const;		// User-specified skin folder with user modifications. e.g. c:\documents and settings\username\application data\second life\skins\curskin  	const std::string &getDefaultSkinDir() const;	// folder for default skin. e.g. c:\program files\second life\skins\default  	const std::string getSkinBaseDir() const;		// folder that contains all installed skins (not user modifications). e.g. c:\program files\second life\skins +	const std::string &getLLPluginDir() const;		// Directory containing plugins and plugin shell  	// Expanded filename  	std::string getExpandedFilename(ELLPath location, const std::string &filename) const; @@ -153,9 +166,11 @@ protected:  	std::string mDefaultCacheDir;	// default cache diretory  	std::string mOSCacheDir;		// operating system cache dir  	std::string mDirDelimiter; +	std::string mSkinBaseDir;			// Base for skins paths.  	std::string mSkinDir;			// Location for current skin info.  	std::string mDefaultSkinDir;			// Location for default skin info.  	std::string mUserSkinDir;			// Location for user-modified skin info. +	std::string mLLPluginDir;			// Location for plugins and plugin shell  };  void dir_exists_or_crash(const std::string &dir_name); diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp index 8ff8c5d1c6..24efcb8ae8 100644 --- a/indra/llvfs/lldir_linux.cpp +++ b/indra/llvfs/lldir_linux.cpp @@ -99,6 +99,7 @@ LLDir_Linux::LLDir_Linux()  #else  	mAppRODataDir = tmp_str;  #endif +	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";  	mOSUserDir = getCurrentUserHome(tmp_str);  	mOSUserAppDir = "";  	mLindenUserDir = tmp_str; @@ -128,6 +129,8 @@ LLDir_Linux::LLDir_Linux()  		}  	} +	mLLPluginDir = mExecutableDir + mDirDelimiter + "llplugin"; +  	// *TODO: don't use /tmp, use $HOME/.secondlife/tmp or something.  	mTempDir = "/tmp";  } @@ -139,8 +142,15 @@ LLDir_Linux::~LLDir_Linux()  // Implementation -void LLDir_Linux::initAppDirs(const std::string &app_name) +void LLDir_Linux::initAppDirs(const std::string &app_name, +							  const std::string& app_read_only_data_dir)  { +	// Allow override so test apps can read newview directory +	if (!app_read_only_data_dir.empty()) +	{ +		mAppRODataDir = app_read_only_data_dir; +		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +	}  	mAppName = app_name;  	std::string upper_app_name(app_name); @@ -370,3 +380,15 @@ BOOL LLDir_Linux::fileExists(const std::string &filename) const  	}  } + +/*virtual*/ std::string LLDir_Linux::getLLPluginLauncher() +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		"SLPlugin"; +} + +/*virtual*/ std::string LLDir_Linux::getLLPluginFilename(std::string base_name) +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		"lib" + base_name + ".so"; +} diff --git a/indra/llvfs/lldir_linux.h b/indra/llvfs/lldir_linux.h index 20b408f8dc..1fec15c5c6 100644 --- a/indra/llvfs/lldir_linux.h +++ b/indra/llvfs/lldir_linux.h @@ -44,7 +44,8 @@ public:  	LLDir_Linux();  	virtual ~LLDir_Linux(); -	virtual void initAppDirs(const std::string &app_name); +	/*virtual*/ void initAppDirs(const std::string &app_name, +		const std::string& app_read_only_data_dir);  public:	  	virtual std::string getCurPath();  	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); @@ -52,6 +53,9 @@ public:  	virtual void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);  	/*virtual*/ BOOL fileExists(const std::string &filename) const; +	/*virtual*/ std::string getLLPluginLauncher(); +	/*virtual*/ std::string getLLPluginFilename(std::string base_name); +  private:  	DIR *mDirp;  	int mCurrentDirIndex; diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp index d4dee5a02e..9be787df11 100644 --- a/indra/llvfs/lldir_mac.cpp +++ b/indra/llvfs/lldir_mac.cpp @@ -142,9 +142,34 @@ LLDir_Mac::LLDir_Mac()  		CFURLRefToLLString(executableParentURLRef, mExecutableDir, true);  		// mAppRODataDir -		CFURLRef	resourcesURLRef = CFBundleCopyResourcesDirectoryURL(mainBundleRef); + +		 +		// *NOTE: When running in a dev tree, use the copy of +		// skins in indra/newview/ rather than in the application bundle.  This +		// mirrors Windows dev environment behavior and allows direct checkin +		// of edited skins/xui files. JC +		 +		// 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 indra_pos = mExecutableDir.find("/indra"); +		if (indra_pos != std::string::npos) +		{ +			// ...we're in a dev checkout +			mSkinBaseDir = mExecutableDir.substr(0, indra_pos) +				+ "/indra/newview/skins"; +			llinfos << "Running in dev checkout with mSkinBaseDir " +				<< mSkinBaseDir << llendl; +		} +		else +		{ +			// ...normal installation running +			mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +		} +		  		// mOSUserDir  		error = FSFindFolder(kUserDomain, kApplicationSupportFolderType, true, &fileRef);  		if (error == noErr) @@ -190,6 +215,8 @@ LLDir_Mac::LLDir_Mac()  		}  		mWorkingDir = getCurPath(); + +		mLLPluginDir = mAppRODataDir + mDirDelimiter + "llplugin";  		CFRelease(executableURLRef);  		executableURLRef = NULL; @@ -203,8 +230,15 @@ LLDir_Mac::~LLDir_Mac()  // Implementation -void LLDir_Mac::initAppDirs(const std::string &app_name) +void LLDir_Mac::initAppDirs(const std::string &app_name, +							const std::string& app_read_only_data_dir)  { +	// Allow override so test apps can read newview directory +	if (!app_read_only_data_dir.empty()) +	{ +		mAppRODataDir = app_read_only_data_dir; +		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +	}  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  	//dumpCurrentDirectories(); @@ -388,4 +422,17 @@ BOOL LLDir_Mac::fileExists(const std::string &filename) const  } +/*virtual*/ std::string LLDir_Mac::getLLPluginLauncher() +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		"SLPlugin"; +} + +/*virtual*/ std::string LLDir_Mac::getLLPluginFilename(std::string base_name) +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		base_name + ".dylib"; +} + +  #endif // LL_DARWIN diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h index 28d48a0b6a..834acc7262 100644 --- a/indra/llvfs/lldir_mac.h +++ b/indra/llvfs/lldir_mac.h @@ -43,7 +43,8 @@ public:  	LLDir_Mac();  	virtual ~LLDir_Mac(); -	virtual void initAppDirs(const std::string &app_name); +	/*virtual*/ void initAppDirs(const std::string &app_name, +		const std::string& app_read_only_data_dir);  public:	  	virtual S32 deleteFilesInDir(const std::string &dirname, const std::string &mask);  	virtual std::string getCurPath(); @@ -52,6 +53,9 @@ public:  	virtual void getRandomFileInDir(const std::string &dirname, const std::string &ask, std::string &fname);  	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; diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index 9553d923aa..a21f3ca0ab 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -161,6 +161,8 @@ LLDir_Solaris::LLDir_Solaris()  		}  	} +	mLLPluginDir = mExecutableDir + mDirDelimiter + "llplugin"; +  	// *TODO: don't use /tmp, use $HOME/.secondlife/tmp or something.  	mTempDir = "/tmp";  } @@ -172,8 +174,14 @@ LLDir_Solaris::~LLDir_Solaris()  // Implementation -void LLDir_Solaris::initAppDirs(const std::string &app_name) +void LLDir_Solaris::initAppDirs(const std::string &app_name, +								const std::string& app_read_only_data_dir)  { +	// Allow override so test apps can read newview directory +	if (!app_read_only_data_dir.empty()) +	{ +		mAppRODataDir = app_read_only_data_dir; +	}  	mAppName = app_name;  	std::string upper_app_name(app_name); diff --git a/indra/llvfs/lldir_solaris.h b/indra/llvfs/lldir_solaris.h index 139754ba28..1fa8348355 100644 --- a/indra/llvfs/lldir_solaris.h +++ b/indra/llvfs/lldir_solaris.h @@ -44,7 +44,8 @@ public:  	LLDir_Solaris();  	virtual ~LLDir_Solaris(); -	virtual void initAppDirs(const std::string &app_name); +	/*virtual*/ void initAppDirs(const std::string &app_name, +		const std::string& app_read_only_data_dir);  public:	  	virtual std::string getCurPath();  	virtual U32 countFilesInDir(const std::string &dirname, const std::string &mask); diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp index 19b9bcc6ea..872f2cf1c1 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -130,6 +130,7 @@ LLDir_Win32::LLDir_Win32()  	else  		mAppRODataDir = mExecutableDir; +	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";  	// Build the default cache directory  	mDefaultCacheDir = buildSLOSCacheDir(); @@ -143,6 +144,8 @@ LLDir_Win32::LLDir_Win32()  			llwarns << "Couldn't create LL_PATH_CACHE dir " << mDefaultCacheDir << llendl;  		}  	} + +	mLLPluginDir = mExecutableDir + mDirDelimiter + "llplugin";  }  LLDir_Win32::~LLDir_Win32() @@ -151,8 +154,15 @@ LLDir_Win32::~LLDir_Win32()  // Implementation -void LLDir_Win32::initAppDirs(const std::string &app_name) +void LLDir_Win32::initAppDirs(const std::string &app_name, +							  const std::string& app_read_only_data_dir)  { +	// Allow override so test apps can read newview directory +	if (!app_read_only_data_dir.empty()) +	{ +		mAppRODataDir = app_read_only_data_dir; +		mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins"; +	}  	mAppName = app_name;  	mOSUserAppDir = mOSUserDir;  	mOSUserAppDir += "\\"; @@ -205,7 +215,14 @@ void LLDir_Win32::initAppDirs(const std::string &app_name)  			llwarns << "Couldn't create LL_PATH_MOZILLA_PROFILE dir " << getExpandedFilename(LL_PATH_MOZILLA_PROFILE,"") << llendl;  		}  	} -	 +	res = LLFile::mkdir(getExpandedFilename(LL_PATH_USER_SKIN,"")); +	if (res == -1) +	{ +		if (errno != EEXIST) +		{ +			llwarns << "Couldn't create LL_PATH_SKINS dir " << getExpandedFilename(LL_PATH_USER_SKIN,"") << llendl; +		} +	}  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  } @@ -378,6 +395,19 @@ BOOL LLDir_Win32::fileExists(const std::string &filename) const  } +/*virtual*/ std::string LLDir_Win32::getLLPluginLauncher() +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		"SLPlugin.exe"; +} + +/*virtual*/ std::string LLDir_Win32::getLLPluginFilename(std::string base_name) +{ +	return gDirUtilp->getLLPluginDir() + gDirUtilp->getDirDelimiter() + +		base_name + ".dll"; +} + +  #if 0  // Utility function to get version number of a DLL diff --git a/indra/llvfs/lldir_win32.h b/indra/llvfs/lldir_win32.h index 8710ca50e1..c2acfa6bd4 100644 --- a/indra/llvfs/lldir_win32.h +++ b/indra/llvfs/lldir_win32.h @@ -41,7 +41,8 @@ public:  	LLDir_Win32();  	virtual ~LLDir_Win32(); -	/*virtual*/ void initAppDirs(const std::string &app_name); +	/*virtual*/ void initAppDirs(const std::string &app_name, +		const std::string& app_read_only_data_dir);  	/*virtual*/ std::string getCurPath();  	/*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask); @@ -49,6 +50,9 @@ public:  	/*virtual*/ void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname);  	/*virtual*/ BOOL fileExists(const std::string &filename) const; +	/*virtual*/ std::string getLLPluginLauncher(); +	/*virtual*/ std::string getLLPluginFilename(std::string base_name); +  private:  	BOOL LLDir_Win32::getNextFileInDir(const llutf16string &dirname, const std::string &mask, std::string &fname, BOOL wrap); diff --git a/indra/llvfs/lllfsthread.h b/indra/llvfs/lllfsthread.h index 5a11cb33d7..3139693302 100644 --- a/indra/llvfs/lllfsthread.h +++ b/indra/llvfs/lllfsthread.h @@ -39,7 +39,7 @@  #include <set>  #include "llapr.h" - +#include "llpointer.h"  #include "llqueuedthread.h"  //============================================================================ diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp index 452594c7e7..315baa001d 100755 --- a/indra/llvfs/llpidlock.cpp +++ b/indra/llvfs/llpidlock.cpp @@ -5,7 +5,7 @@   *   * $LicenseInfo:firstyear=2007&license=viewergpl$   *  - * Copyright (c) 2007, Linden Research, Inc. + * Copyright (c) 2007-2009, Linden Research, Inc.   *    * Second Life Viewer Source Code   * The source code in this file ("Source Code") is provided by Linden Lab @@ -13,12 +13,13 @@   * ("GPL"), unless you have obtained a separate licensing agreement   * ("Other License"), formally executed by you and Linden Lab.  Terms of   * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2   *    * There are special exceptions to the terms and conditions of the GPL as   * it is applied to this Source Code. View the full text of the exception   * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception   *    * By copying, modifying or distributing this software, you acknowledge   * that you have read and understood your obligations described above, diff --git a/indra/llvfs/llpidlock.h b/indra/llvfs/llpidlock.h index 44ed8caf46..42aee4dc4f 100755 --- a/indra/llvfs/llpidlock.h +++ b/indra/llvfs/llpidlock.h @@ -4,7 +4,7 @@   *   * $LicenseInfo:firstyear=2001&license=viewergpl$   *  - * Copyright (c) 2001-2007, Linden Research, Inc. + * Copyright (c) 2001-2009, Linden Research, Inc.   *    * Second Life Viewer Source Code   * The source code in this file ("Source Code") is provided by Linden Lab @@ -12,12 +12,13 @@   * ("GPL"), unless you have obtained a separate licensing agreement   * ("Other License"), formally executed by you and Linden Lab.  Terms of   * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2   *    * There are special exceptions to the terms and conditions of the GPL as   * it is applied to this Source Code. View the full text of the exception   * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception   *    * By copying, modifying or distributing this software, you acknowledge   * that you have read and understood your obligations described above, diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp index 6b1563bab1..5fdf41188d 100644 --- a/indra/llvfs/llvfile.cpp +++ b/indra/llvfs/llvfile.cpp @@ -44,6 +44,8 @@ const S32 LLVFile::WRITE		= 0x00000002;  const S32 LLVFile::READ_WRITE	= 0x00000003;  // LLVFile::READ & LLVFile::WRITE  const S32 LLVFile::APPEND		= 0x00000006;  // 0x00000004 & LLVFile::WRITE +static LLFastTimer::DeclareTimer FTM_VFILE_WAIT("VFile Wait"); +  //----------------------------------------------------------------------------  LLVFSThread* LLVFile::sVFSThread = NULL;  BOOL LLVFile::sAllocdVFSThread = FALSE; @@ -318,7 +320,7 @@ BOOL LLVFile::setMaxSize(S32 size)  	if (!mVFS->checkAvailable(size))  	{ -		LLFastTimer t(LLFastTimer::FTM_VFILE_WAIT); +		LLFastTimer t(FTM_VFILE_WAIT);  		S32 count = 0;  		while (sVFSThread->getPending() > 1000)  		{ @@ -426,7 +428,7 @@ bool LLVFile::isLocked(EVFSLock lock)  void LLVFile::waitForLock(EVFSLock lock)  { -	LLFastTimer t(LLFastTimer::FTM_VFILE_WAIT); +	LLFastTimer t(FTM_VFILE_WAIT);  	// spin until the lock clears  	while (isLocked(lock))  	{ diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index ef8c4d6c7f..9ce1e75d06 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -46,7 +46,9 @@  #endif  #include "llvfs.h" +  #include "llstl.h" +#include "lltimer.h"  const S32 FILE_BLOCK_MASK = 0x000003FF;	 // 1024-byte blocks  const S32 VFS_CLEANUP_SIZE = 5242880;  // how much space we free up in a single stroke | 
