2
0
Fork 0
mirror of https://github.com/fish-shell/fish-shell synced 2025-02-15 21:49:26 +00:00

Don't use KERN_PROC_PATHNAME on NetBSD

This returns the wrong thing and breaks the tests.

Since it's not super important anyway, just disable it and go back to
/proc, that works.
This commit is contained in:
Fabian Homborg 2020-12-05 14:36:29 +01:00
parent 02efce51a9
commit 7cefe598e9

View file

@ -1901,10 +1901,12 @@ std::string get_executable_path(const char *argv0) {
// https://opensource.apple.com/source/adv_cmds/adv_cmds-163/ps/print.c
uint32_t buffSize = sizeof buff;
if (_NSGetExecutablePath(buff, &buffSize) == 0) return std::string(buff);
#elif defined(__BSD__) && defined(KERN_PROC_PATHNAME)
#elif defined(__BSD__) && defined(KERN_PROC_PATHNAME) && !defined(__NetBSD__)
// BSDs do not have /proc by default, (although it can be mounted as procfs via the Linux
// compatibility layer). We can use sysctl instead: per sysctl(3), passing in a process ID of -1
// returns the value for the current process.
//
// (this is broken on NetBSD, while /proc works, so we use that)
size_t buff_size = sizeof buff;
int name[] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
int result = sysctl(name, sizeof(name) / sizeof(int), buff, &buff_size, nullptr, 0);