summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-12-16 19:37:39 +0800
committerGitHub <[email protected]>2023-12-16 19:37:39 +0800
commit229d7c1c20bb5bb18005efc97f301e15b6b5da72 (patch)
tree47cf7a9bdde7711e66351b3849d3a81255a0e6f1
parent86739912c5630ad7033b1d7f4c206489b6d201b0 (diff)
parentbf8e4fe864732f43f920fae5566957434c33f207 (diff)
Merge pull request #4508 from cmeerw/fix-netbsd-get-program-file
Fix xm_engine_get_program_file for NetBSD
-rw-r--r--core/src/xmake/engine.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/core/src/xmake/engine.c b/core/src/xmake/engine.c
index f1b0b381b..311ffe464 100644
--- a/core/src/xmake/engine.c
+++ b/core/src/xmake/engine.c
@@ -54,10 +54,8 @@
// proc/self
#if defined(TB_CONFIG_OS_LINUX)
# define XM_PROC_SELF_FILE "/proc/self/exe"
-#elif defined(TB_CONFIG_OS_BSD) && !defined(__OpenBSD__)
-# if defined(__FreeBSD__)
-# define XM_PROC_SELF_FILE "/proc/curproc/file"
-# elif defined(__NetBSD__)
+#elif defined(TB_CONFIG_OS_BSD) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
+# if defined(__NetBSD__)
# define XM_PROC_SELF_FILE "/proc/curproc/exe"
# else
# define XM_PROC_SELF_FILE "/proc/curproc/file"
@@ -661,15 +659,6 @@ static tb_size_t xm_engine_get_program_file(xm_engine_t* engine, tb_char_t* path
tb_uint32_t bufsize = (tb_uint32_t)maxn;
if (!_NSGetExecutablePath(path, &bufsize))
ok = tb_true;
-#elif defined(TB_CONFIG_OS_BSD) && defined(KERN_PROC_PATHNAME)
- // only for freebsd, https://github.com/xmake-io/xmake/issues/2948
- tb_int_t mib[4]; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PATHNAME; mib[3] = -1;
- size_t size = maxn;
- if (sysctl(mib, 4, path, &size, tb_null, 0) == 0 && size < maxn)
- {
- path[size] = '\0';
- ok = tb_true;
- }
#elif defined(XM_PROC_SELF_FILE)
// get the executale file path as program directory
ssize_t size = readlink(XM_PROC_SELF_FILE, path, (size_t)maxn);
@@ -678,6 +667,15 @@ static tb_size_t xm_engine_get_program_file(xm_engine_t* engine, tb_char_t* path
path[size] = '\0';
ok = tb_true;
}
+#elif defined(TB_CONFIG_OS_BSD) && defined(KERN_PROC_PATHNAME)
+ // only for FreeBSD and OpenBSD, https://github.com/xmake-io/xmake/issues/2948
+ tb_int_t mib[4]; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PATHNAME; mib[3] = -1;
+ size_t size = maxn;
+ if (sysctl(mib, 4, path, &size, tb_null, 0) == 0 && size < maxn)
+ {
+ path[size] = '\0';
+ ok = tb_true;
+ }
#else
static tb_char_t const* s_paths[] =
{