diff options
author | Josh Gao <jmgao@google.com> | 2016-09-01 12:31:42 -0700 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2016-09-01 12:32:35 -0700 |
commit | 7307f09457488dd545ca2306a5d2f01b31f14460 (patch) | |
tree | a372439cb0e839af5ac7700504d63ec7d42f2a02 /base/file.cpp | |
parent | 945d1aaa32c543ac80a64fcf152ab2eb2317eeee (diff) | |
download | system_core-7307f09457488dd545ca2306a5d2f01b31f14460.tar.gz system_core-7307f09457488dd545ca2306a5d2f01b31f14460.tar.bz2 system_core-7307f09457488dd545ca2306a5d2f01b31f14460.zip |
base: use _NSGetExecutablePath in GetExecutablePath
Bug: http://b/31240820
Change-Id: I0dbf95d3667c7ce7b474ddbb3f8e3ed69476d13e
Test: mma && adb kill-server && adb devices
Diffstat (limited to 'base/file.cpp')
-rw-r--r-- | base/file.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/base/file.cpp b/base/file.cpp index 03ce4ea7e..721ab2f7f 100644 --- a/base/file.cpp +++ b/base/file.cpp @@ -22,6 +22,7 @@ #include <sys/types.h> #include <unistd.h> +#include <memory> #include <string> #include <vector> @@ -31,7 +32,7 @@ #include "utils/Compat.h" #if defined(__APPLE__) -#import <Carbon/Carbon.h> +#include <mach-o/dyld.h> #endif #if defined(_WIN32) #include <windows.h> @@ -210,15 +211,14 @@ std::string GetExecutablePath() { android::base::Readlink("/proc/self/exe", &path); return path; #elif defined(__APPLE__) - // TODO: use _NSGetExecutablePath instead (http://b/31240820)? - CFBundleRef mainBundle = CFBundleGetMainBundle(); - CFURLRef executableURL = CFBundleCopyExecutableURL(mainBundle); - CFStringRef executablePathString = CFURLCopyFileSystemPath(executableURL, kCFURLPOSIXPathStyle); - CFRelease(executableURL); - char path[PATH_MAX + 1]; - CFStringGetFileSystemRepresentation(executablePathString, path, sizeof(PATH_MAX)-1); - CFRelease(executablePathString); + uint32_t path_len = sizeof(path); + int rc = _NSGetExecutablePath(path, &path_len); + if (rc < 0) { + std::unique_ptr<char> path_buf(new char[path_len]); + _NSGetExecutablePath(path_buf.get(), &path_len); + return path_buf.get(); + } return path; #elif defined(_WIN32) char path[PATH_MAX + 1]; |