#include "porting.h"
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__)
#include <sys/types.h>
#include <sys/sysctl.h>
+ extern char **environ;
#elif defined(_WIN32)
#include <windows.h>
#include <wincrypt.h>
#if defined(__ANDROID__)
#include "porting_android.h"
#endif
+#if defined(__APPLE__)
+ // For _NSGetEnviron()
+ // Related: https://gitlab.haskell.org/ghc/ghc/issues/2458
+ #include <crt_externs.h>
+#endif
+
+#if defined(__HAIKU__)
+ #include <FindDirectory.h>
+#endif
#include "config.h"
#include "debug.h"
return true;
}
+#elif defined(__HAIKU__)
+
+bool getCurrentExecPath(char *buf, size_t len)
+{
+ return find_path(B_APP_IMAGE_SYMBOL, B_FIND_PATH_IMAGE_PATH, NULL, buf, len) == B_OK;
+}
//// Solaris
#elif defined(__sun) || defined(sun)
return true;
#elif defined(__APPLE__)
const char *argv[] = {"open", url.c_str(), NULL};
- return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv, environ) == 0;
+ return posix_spawnp(NULL, "open", NULL, NULL, (char**)argv,
+ (*_NSGetEnviron())) == 0;
#else
const char *argv[] = {"xdg-open", url.c_str(), NULL};
return posix_spawnp(NULL, "xdg-open", NULL, NULL, (char**)argv, environ) == 0;