summaryrefslogtreecommitdiffstats
path: root/base/path_service.cc
diff options
context:
space:
mode:
authorerikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-08 20:16:08 +0000
committererikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-08 20:16:08 +0000
commit5af2edb98c8ebde32dcc51dcde9b02bea82468a3 (patch)
tree8e575497f7343fd6eca212253c4fad33bc5cfb68 /base/path_service.cc
parent764be58b4a7cc20271571be59118d260aad13966 (diff)
downloadchromium_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.cc37
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,