Signed-off-by: Paolo Bonzini <[email protected]>
Signed-off-by: Fam Zheng <[email protected]>
---
util/oslib-posix.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index c2eeb4f..3214e44 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -59,6 +59,12 @@ extern int daemon(int, int);
#include <sys/mman.h>
#include <libgen.h>
+/* Get declaration of _NSGetExecutablePath on MacOS X 10.2 or newer. */
+#if defined(__APPLE__) && defined(__MACH__)
+#define ENUM_DYLD_BOOL
+#include <mach-o/dyld.h>
+#endif
+
#ifdef CONFIG_LINUX
#include <sys/syscall.h>
#endif
@@ -307,6 +313,15 @@ void qemu_init_exec_dir(const char *argv0)
p = buf;
}
}
+#elif defined(__APPLE__) && defined(__MACH__)
+ {
+ char result[PATH_MAX];
+ uint32_t length = PATH_MAX;
+ if (_NSGetExecutablePath(result, &length) != 0 || result[0] != '/') {
+ return;
+ }
+ p = realpath(result, buf);
+ }
#endif
/* If we don't have any way of figuring out the actual executable
location then try argv[0]. */
--
1.8.5.4