aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/util.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-06-23 01:32:17 +0200
committerEelco Dolstra <edolstra@gmail.com>2022-06-23 01:32:46 +0200
commit1e55ee2961eabd6016dfef1793996ded97c9054c (patch)
treea08d8b9e65a7149b7267f0b6aa72c3c0368eb03e /src/libutil/util.cc
parent184f4e40de0960deccad2147099ea232e5e036c3 (diff)
getSelfExe(): Support macOS
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r--src/libutil/util.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 82628461c..28df30fef 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -29,6 +29,7 @@
#ifdef __APPLE__
#include <sys/syscall.h>
+#include <mach-o/dyld.h>
#endif
#ifdef __linux__
@@ -635,10 +636,17 @@ Path getDataDir()
std::optional<Path> getSelfExe()
{
- static std::optional<Path> cached = []()
+ static auto cached = []() -> std::optional<Path>
{
#if __linux__
return readLink("/proc/self/exe");
+ #elif __APPLE__
+ char buf[1024];
+ uint32_t size = sizeof(buf);
+ if (_NSGetExecutablePath(buf, &size) == 0)
+ return buf;
+ else
+ return std::nullopt;
#else
return std::nullopt;
#endif