diff options
| author | Steven Bennetts <steve@lindenlab.com> | 2009-06-21 08:04:56 +0000 | 
|---|---|---|
| committer | Steven Bennetts <steve@lindenlab.com> | 2009-06-21 08:04:56 +0000 | 
| commit | 9ec432034dc3c45d7ce763eb02dae4cc7f6b8da8 (patch) | |
| tree | 4a505c1e0919af52800b3ffb3eaf135e7d6f9ce6 /indra/llvfs | |
| parent | 351ebe9fcb76f3b99c2957004bb8493a904869ee (diff) | |
merge -r 122421-124917 viewer-2.0.0-2 -> viewer-2.0.0-3
ignore-dead-branch
Diffstat (limited to 'indra/llvfs')
| -rw-r--r-- | indra/llvfs/lldir.cpp | 55 | ||||
| -rw-r--r-- | indra/llvfs/lldir.h | 34 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.cpp | 8 | ||||
| -rw-r--r-- | indra/llvfs/lldir_linux.h | 3 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.cpp | 8 | ||||
| -rw-r--r-- | indra/llvfs/lldir_mac.h | 3 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.cpp | 8 | ||||
| -rw-r--r-- | indra/llvfs/lldir_solaris.h | 3 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.cpp | 17 | ||||
| -rw-r--r-- | indra/llvfs/lldir_win32.h | 3 | ||||
| -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/llvfs.cpp | 2 | 
14 files changed, 111 insertions, 49 deletions
| diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp index d6a6eca341..54af8b43ad 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) @@ -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,29 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd  		prefix = getSkinDir();  		break; +	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_SKINS:  		prefix = getAppRODataDir();  		prefix += mDirDelimiter;  		prefix += "skins";  		break; -	//case LL_PATH_HTML: -	//	prefix = getSkinDir(); -	//	prefix += mDirDelimiter; -	//	prefix += "html"; -	//	break; +	case LL_PATH_LOCAL_ASSETS: +		prefix = getAppRODataDir(); +		prefix += mDirDelimiter; +		prefix += "local_assets"; +		break;  	case LL_PATH_MOZILLA_PROFILE:  		prefix = getOSUserAppDir(); @@ -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;  } diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h index 760b6512a5..a33f7a2914 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,8 @@ 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;  	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 diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp index 8ff8c5d1c6..2d724f0f9f 100644 --- a/indra/llvfs/lldir_linux.cpp +++ b/indra/llvfs/lldir_linux.cpp @@ -139,8 +139,14 @@ 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; +	}  	mAppName = app_name;  	std::string upper_app_name(app_name); diff --git a/indra/llvfs/lldir_linux.h b/indra/llvfs/lldir_linux.h index 20b408f8dc..a78a9854ff 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); diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp index d4dee5a02e..04577bfc3b 100644 --- a/indra/llvfs/lldir_mac.cpp +++ b/indra/llvfs/lldir_mac.cpp @@ -203,8 +203,14 @@ 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; +	}  	mCAFile = getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");  	//dumpCurrentDirectories(); diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h index 28d48a0b6a..82ac94ed4c 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(); diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp index 9553d923aa..ba71bc0eb4 100644 --- a/indra/llvfs/lldir_solaris.cpp +++ b/indra/llvfs/lldir_solaris.cpp @@ -172,8 +172,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..1fdd31c635 100644 --- a/indra/llvfs/lldir_win32.cpp +++ b/indra/llvfs/lldir_win32.cpp @@ -151,8 +151,14 @@ 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; +	}  	mAppName = app_name;  	mOSUserAppDir = mOSUserDir;  	mOSUserAppDir += "\\"; @@ -205,7 +211,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");  } diff --git a/indra/llvfs/lldir_win32.h b/indra/llvfs/lldir_win32.h index 8710ca50e1..d2497901e4 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); 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 e231002a52..93ac120302 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/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 | 
