diff options
author | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-08 20:16:08 +0000 |
---|---|---|
committer | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-08 20:16:08 +0000 |
commit | 5af2edb98c8ebde32dcc51dcde9b02bea82468a3 (patch) | |
tree | 8e575497f7343fd6eca212253c4fad33bc5cfb68 /base/path_service.cc | |
parent | 764be58b4a7cc20271571be59118d260aad13966 (diff) | |
download | chromium_src-5af2edb98c8ebde32dcc51dcde9b02bea82468a3.zip chromium_src-5af2edb98c8ebde32dcc51dcde9b02bea82468a3.tar.gz chromium_src-5af2edb98c8ebde32dcc51dcde9b02bea82468a3.tar.bz2 |
* add base_paths_mac.mm to mac port
* add file_util_posix.cc to mac port (NOTE: untested on linux)
* a bit of cleanup in path_service.cc related to this
* a few more cleanups to file_util.cc to make it build for mac
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@589 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/path_service.cc')
-rw-r--r-- | base/path_service.cc | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/base/path_service.cc b/base/path_service.cc index 12073f7..8205b03 100644 --- a/base/path_service.cc +++ b/base/path_service.cc @@ -43,8 +43,10 @@ namespace base { bool PathProvider(int key, std::wstring* result); -#ifdef OS_WIN +#if defined(OS_WIN) bool PathProviderWin(int key, std::wstring* result); +#elif defined (OS_MACOSX) + bool PathProviderMac(int key, std::wstring* ressult); #endif } @@ -84,6 +86,18 @@ static Provider base_provider_win = { }; #endif +#ifdef OS_MACOSX + static Provider base_provider_mac = { + base::PathProviderMac, + &base_provider, +#ifndef NDEBUG + base::PATH_MAC_START, + base::PATH_MAC_END +#endif + }; +#endif + + struct PathData { Lock lock; PathMap cache; // Track mappings from path key to path value. @@ -93,7 +107,9 @@ struct PathData { PathData() { #if defined(OS_WIN) providers = &base_provider_win; -#elif defined(OS_POSIX) +#elif defined(OS_MACOSX) + providers = &base_provider_mac; +#elif defined(OS_LINUX) providers = &base_provider; #endif } @@ -115,17 +131,8 @@ bool PathService::Get(int key, std::wstring* result) { DCHECK(key >= base::DIR_CURRENT); // special case the current directory because it can never be cached - if (key == base::DIR_CURRENT) { -#if defined(OS_WIN) + if (key == base::DIR_CURRENT) return file_util::GetCurrentDirectory(result); -#elif defined(OS_POSIX) - char system_buffer[PATH_MAX]; - system_buffer[0] = 0; - getcwd(system_buffer, sizeof(system_buffer)); - *result = NativeMBToWide(system_buffer); - return true; -#endif - } // TODO(darin): it would be nice to avoid holding this lock while calling out // to the path providers. @@ -170,6 +177,7 @@ bool PathService::Override(int key, const std::wstring& path) { DCHECK(path_data); DCHECK(key > base::DIR_CURRENT) << "invalid path key"; + // TODO(erikkay): pull this into file_util* #if defined(OS_WIN) wchar_t file_path_buf[MAX_PATH]; if (!_wfullpath(file_path_buf, path.c_str(), MAX_PATH)) @@ -202,12 +210,7 @@ bool PathService::Override(int key, const std::wstring& path) { } bool PathService::SetCurrentDirectory(const std::wstring& current_directory) { -#if defined(OS_WIN) return file_util::SetCurrentDirectory(current_directory); -#elif defined(OS_POSIX) - int ret = chdir(WideToNativeMB(current_directory).c_str()); - return (ret == 0); -#endif } void PathService::RegisterProvider(ProviderFunc func, int key_start, |