Index: third_party/crashpad/crashpad/util/misc/paths_linux.cc |
diff --git a/third_party/crashpad/crashpad/test/paths_linux.cc b/third_party/crashpad/crashpad/util/misc/paths_linux.cc |
similarity index 78% |
rename from third_party/crashpad/crashpad/test/paths_linux.cc |
rename to third_party/crashpad/crashpad/util/misc/paths_linux.cc |
index 6e6da0e057d647a7bdce82cc6c80867fd5fb5d74..569944bcbd41cd6066ac9d3d5628f35f8e96e1ee 100644 |
--- a/third_party/crashpad/crashpad/test/paths_linux.cc |
+++ b/third_party/crashpad/crashpad/util/misc/paths_linux.cc |
@@ -12,7 +12,7 @@ |
// See the License for the specific language governing permissions and |
// limitations under the License. |
-#include "test/paths.h" |
+#include "util/misc/paths.h" |
#include <limits.h> |
#include <unistd.h> |
@@ -21,42 +21,41 @@ |
#include <string> |
#include "base/logging.h" |
-#include "util/misc/implicit_cast.h" |
namespace crashpad { |
-namespace test { |
// static |
-base::FilePath Paths::Executable() { |
+bool Paths::Executable(base::FilePath* path) { |
// Linux does not provide a straightforward way to size the buffer before |
// calling readlink(). Normally, the st_size field returned by lstat() could |
// be used, but this is usually zero for things in /proc. |
// |
// The /proc filesystem does not provide any way to read “exe” links for |
- // pathnames longer than a page. See linux-4.4.27/fs/proc/base.c |
+ // pathnames longer than a page. See linux-4.9.20/fs/proc/base.c |
// do_proc_readlink(), which allocates a single page to receive the path |
// string. Coincidentally, the page size and PATH_MAX are normally the same |
// value, although neither is strictly a limit on the length of a pathname. |
// |
// On Android, the smaller of the page size and PATH_MAX actually does serve |
// as an effective limit on the length of an executable’s pathname. See |
- // Android 7.0.0 bionic/linker/linker.cpp get_executable_path(), which aborts |
+ // Android 7.1.1 bionic/linker/linker.cpp get_executable_path(), which aborts |
// via __libc_fatal() if the “exe” link can’t be read into a PATH_MAX-sized |
// buffer. |
- std::string exe_path(std::max(implicit_cast<size_t>(sysconf(_SC_PAGESIZE)), |
- implicit_cast<size_t>(PATH_MAX)), |
+ std::string exe_path(std::max(getpagesize(), PATH_MAX), |
std::string::value_type()); |
ssize_t exe_path_len = |
readlink("/proc/self/exe", &exe_path[0], exe_path.size()); |
if (exe_path_len < 0) { |
- PLOG(FATAL) << "readlink"; |
+ PLOG(ERROR) << "readlink"; |
+ return false; |
} else if (static_cast<size_t>(exe_path_len) >= exe_path.size()) { |
- LOG(FATAL) << "readlink"; |
+ LOG(ERROR) << "readlink"; |
+ return false; |
} |
exe_path.resize(exe_path_len); |
- return base::FilePath(exe_path); |
+ *path = base::FilePath(exe_path); |
+ return true; |
} |
-} // namespace test |
} // namespace crashpad |