Index: base/base_paths_win.cc |
diff --git a/base/base_paths_win.cc b/base/base_paths_win.cc |
index 58f925f7e1f69d06529a1f7489faea656ce7285b..2e0eededdafd1823d192deec5b8e8de21de62e69 100644 |
--- a/base/base_paths_win.cc |
+++ b/base/base_paths_win.cc |
@@ -20,6 +20,57 @@ using base::FilePath; |
namespace base { |
+bool GetLocalAppData(FilePath* result) { |
+ wchar_t system_buffer[MAX_PATH]; |
+ system_buffer[0] = 0; |
+ if (FAILED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, |
+ SHGFP_TYPE_CURRENT, system_buffer))) |
+ return false; |
+ *result = FilePath(system_buffer); |
+ return true; |
+} |
+ |
+bool GetFileExe(FilePath* result) { |
+ wchar_t system_buffer[MAX_PATH]; |
+ system_buffer[0] = 0; |
+ if (GetModuleFileName(NULL, system_buffer, MAX_PATH) == 0) |
+ return false; |
+ *result = FilePath(system_buffer); |
+ return true; |
+} |
+ |
+bool GetFileModule(FilePath* result) { |
+ wchar_t system_buffer[MAX_PATH]; |
+ system_buffer[0] = 0; |
+ // The resource containing module is assumed to be the one that this code |
+ // lives in, whether that's a dll or exe. |
+ HMODULE this_module = reinterpret_cast<HMODULE>(&__ImageBase); |
+ if (GetModuleFileName(this_module, system_buffer, MAX_PATH) == 0) |
+ return false; |
+ *result = FilePath(system_buffer); |
+ return true; |
+} |
+ |
+bool GetProgramFilesX86(FilePath* result) { |
+ wchar_t system_buffer[MAX_PATH]; |
+ system_buffer[0] = 0; |
+ if (FAILED(SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, NULL, |
+ SHGFP_TYPE_CURRENT, system_buffer))) |
+ return false; |
+ *result = FilePath(system_buffer); |
+ return true; |
+} |
+ |
+bool GetProgramFiles(FilePath* result) { |
+ wchar_t system_buffer[MAX_PATH]; |
+ system_buffer[0] = 0; |
+ if (FAILED(SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, |
+ SHGFP_TYPE_CURRENT, system_buffer))) |
+ return false; |
+ *result = FilePath(system_buffer); |
+ return true; |
+} |
+ |
bool PathProviderWin(int key, FilePath* result) { |
// We need to go compute the value. It would be nice to support paths with |
// names longer than MAX_PATH, but the system functions don't seem to be |
@@ -32,19 +83,13 @@ bool PathProviderWin(int key, FilePath* result) { |
FilePath cur; |
switch (key) { |
case base::FILE_EXE: |
- if (GetModuleFileName(NULL, system_buffer, MAX_PATH) == 0) |
+ if (!GetFileExe(&cur)) |
return false; |
- cur = FilePath(system_buffer); |
break; |
- case base::FILE_MODULE: { |
- // the resource containing module is assumed to be the one that |
- // this code lives in, whether that's a dll or exe |
- HMODULE this_module = reinterpret_cast<HMODULE>(&__ImageBase); |
- if (GetModuleFileName(this_module, system_buffer, MAX_PATH) == 0) |
+ case base::FILE_MODULE: |
+ if (!GetFileModule(&cur)) |
return false; |
- cur = FilePath(system_buffer); |
break; |
- } |
case base::DIR_WINDOWS: |
GetWindowsDirectory(system_buffer, MAX_PATH); |
cur = FilePath(system_buffer); |
@@ -56,18 +101,14 @@ bool PathProviderWin(int key, FilePath* result) { |
case base::DIR_PROGRAM_FILESX86: |
if (base::win::OSInfo::GetInstance()->architecture() != |
base::win::OSInfo::X86_ARCHITECTURE) { |
- if (FAILED(SHGetFolderPath(NULL, CSIDL_PROGRAM_FILESX86, NULL, |
- SHGFP_TYPE_CURRENT, system_buffer))) |
+ if (!GetProgramFilesX86(&cur)) |
return false; |
- cur = FilePath(system_buffer); |
break; |
} |
// Fall through to base::DIR_PROGRAM_FILES if we're on an X86 machine. |
case base::DIR_PROGRAM_FILES: |
- if (FAILED(SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, |
- SHGFP_TYPE_CURRENT, system_buffer))) |
+ if (!GetProgramFiles(&cur)) |
return false; |
- cur = FilePath(system_buffer); |
break; |
case base::DIR_PROGRAM_FILES6432: |
#if !defined(_WIN64) |
@@ -121,10 +162,8 @@ bool PathProviderWin(int key, FilePath* result) { |
cur = FilePath(system_buffer); |
break; |
case base::DIR_LOCAL_APP_DATA: |
- if (FAILED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, |
- SHGFP_TYPE_CURRENT, system_buffer))) |
+ if (!GetLocalAppData(&cur)) |
return false; |
- cur = FilePath(system_buffer); |
break; |
case base::DIR_SOURCE_ROOT: { |
FilePath executableDir; |