diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2018-11-29 10:37:27 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2018-11-29 10:37:27 +0000 |
commit | 6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19 (patch) | |
tree | fcba4f01bee08b310e5d0b7aa23d0bb144f623f9 /osdep-netbsd.c | |
parent | 1ed994a6c8ef1fcdfb3eb458b9a403cce5846a38 (diff) | |
download | rtmux-6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19.tar.gz rtmux-6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19.tar.bz2 rtmux-6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19.zip |
osdep_get_cwd for NetBSD, from Leonardo Taccari.
Diffstat (limited to 'osdep-netbsd.c')
-rw-r--r-- | osdep-netbsd.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/osdep-netbsd.c b/osdep-netbsd.c index 823eeebf..daca1abb 100644 --- a/osdep-netbsd.c +++ b/osdep-netbsd.c @@ -23,14 +23,17 @@ #include <errno.h> #include <event.h> +#include <limits.h> #include <stdlib.h> #include <string.h> #include <unistd.h> +#include "tmux.h" + #define is_runnable(p) \ - ((p)->p_stat == LSRUN || (p)->p_stat == SIDL) + ((p)->p_stat == LSRUN || (p)->p_stat == SIDL) #define is_stopped(p) \ - ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB) + ((p)->p_stat == SSTOP || (p)->p_stat == SZOMB) struct kinfo_proc2 *cmp_procs(struct kinfo_proc2 *, struct kinfo_proc2 *); char *osdep_get_name(int, char *); @@ -129,6 +132,22 @@ error: char * osdep_get_cwd(int fd) { + static char target[PATH_MAX + 1]; + char *path; + pid_t pgrp; + ssize_t n; + + if ((pgrp = tcgetpgrp(fd)) == -1) + return (NULL); + + xasprintf(&path, "/proc/%lld/cwd", (long long) pgrp); + n = readlink(path, target, sizeof(target) - 1); + free(path); + if (n > 0) { + target[n] = '\0'; + return (target); + } + return (NULL); } |