From b3ca410bc398e9aa7a045cf1337ca3f08c005e6e Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 20 Jun 2019 06:57:37 +0100 Subject: Use KERN_PROC_CWD on NetBSD, from Leonardo Taccari. --- osdep-netbsd.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'osdep-netbsd.c') diff --git a/osdep-netbsd.c b/osdep-netbsd.c index daca1abb..67894175 100644 --- a/osdep-netbsd.c +++ b/osdep-netbsd.c @@ -133,13 +133,27 @@ char * osdep_get_cwd(int fd) { static char target[PATH_MAX + 1]; - char *path; pid_t pgrp; +#ifdef KERN_PROC_CWD + int mib[4]; + size_t len; +#else + char *path; ssize_t n; +#endif if ((pgrp = tcgetpgrp(fd)) == -1) return (NULL); +#ifdef KERN_PROC_CWD + mib[0] = CTL_KERN; + mib[1] = KERN_PROC_ARGS; + mib[2] = pgrp; + mib[3] = KERN_PROC_CWD; + len = sizeof(target); + if (sysctl(mib, __arraycount(mib), target, &len, NULL, 0) == 0) + return (target); +#else xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp); n = readlink(path, target, sizeof(target) - 1); free(path); @@ -147,6 +161,7 @@ osdep_get_cwd(int fd) target[n] = '\0'; return (target); } +#endif return (NULL); } -- cgit v1.2.3