Index: base/base_paths_mac.mm |
=================================================================== |
--- base/base_paths_mac.mm (revision 29041) |
+++ base/base_paths_mac.mm (working copy) |
@@ -5,6 +5,7 @@ |
#include "base/base_paths_mac.h" |
#import <Cocoa/Cocoa.h> |
+#include <mach-o/dyld.h> |
#include "base/file_path.h" |
#include "base/file_util.h" |
@@ -42,9 +43,13 @@ |
case base::FILE_MODULE: { |
// Executable path can have relative references ("..") depending on |
// how the app was launched. |
- NSString* path = |
- [[[NSBundle mainBundle] executablePath] stringByStandardizingPath]; |
- cur = [path fileSystemRepresentation]; |
+ uint32_t executable_length = 0; |
+ _NSGetExecutablePath(NULL, &executable_length); |
+ DCHECK_GT(executable_length, 1u); |
+ char* executable = WriteInto(&cur, executable_length); |
+ int rv = _NSGetExecutablePath(executable, &executable_length); |
+ DCHECK_EQ(rv, 0); |
+ DCHECK(!cur.empty()); |
break; |
} |
case base::DIR_CACHE: |
@@ -52,22 +57,16 @@ |
case base::DIR_APP_DATA: |
return GetUserDirectory(NSApplicationSupportDirectory, result); |
case base::DIR_SOURCE_ROOT: { |
- FilePath path; |
- PathService::Get(base::DIR_EXE, &path); |
+ PathService::Get(base::DIR_EXE, result); |
if (mac_util::AmIBundled()) { |
// The bundled app executables (Chromium, TestShell, etc) live five |
// levels down, eg: |
// src/xcodebuild/{Debug|Release}/Chromium.app/Contents/MacOS/Chromium. |
- path = path.DirName(); |
- path = path.DirName(); |
- path = path.DirName(); |
- path = path.DirName(); |
- *result = path.DirName(); |
+ *result = result->DirName().DirName().DirName().DirName().DirName(); |
} else { |
// Unit tests execute two levels deep from the source root, eg: |
// src/xcodebuild/{Debug|Release}/base_unittests |
- path = path.DirName(); |
- *result = path.DirName(); |
+ *result = result->DirName().DirName(); |
} |
return true; |
} |