diff options
| author | ruki <[email protected]> | 2023-12-16 19:37:39 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-12-16 19:37:39 +0800 |
| commit | 229d7c1c20bb5bb18005efc97f301e15b6b5da72 (patch) | |
| tree | 47cf7a9bdde7711e66351b3849d3a81255a0e6f1 | |
| parent | 86739912c5630ad7033b1d7f4c206489b6d201b0 (diff) | |
| parent | bf8e4fe864732f43f920fae5566957434c33f207 (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.c | 24 |
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[] = { |
