summaryrefslogtreecommitdiffstats
path: root/osdep-netbsd.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2018-11-29 10:37:27 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2018-11-29 10:37:27 +0000
commit6cf2f74fe9fc205f4a14fc11fbe53daa7483dd19 (patch)
treefcba4f01bee08b310e5d0b7aa23d0bb144f623f9 /osdep-netbsd.c
parent1ed994a6c8ef1fcdfb3eb458b9a403cce5846a38 (diff)
osdep_get_cwd for NetBSD, from Leonardo Taccari.
Diffstat (limited to 'osdep-netbsd.c')
-rw-r--r--osdep-netbsd.c23
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);
}