diff options
Diffstat (limited to 'osdep-freebsd.c')
-rw-r--r-- | osdep-freebsd.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/osdep-freebsd.c b/osdep-freebsd.c index 6b0c8886..1027a648 100644 --- a/osdep-freebsd.c +++ b/osdep-freebsd.c @@ -29,9 +29,11 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <libutil.h> struct kinfo_proc *cmp_procs(struct kinfo_proc *, struct kinfo_proc *); char *osdep_get_name(int, char *); +char *osdep_get_cwd(pid_t); struct event_base *osdep_event_init(void); #ifndef nitems @@ -130,6 +132,28 @@ error: return (NULL); } +char * +osdep_get_cwd(pid_t pid) +{ + static char wd[PATH_MAX]; + struct kinfo_file *info = NULL; + int nrecords, i; + + if ((info = kinfo_getfile(pid, &nrecords)) == NULL) + return (NULL); + + for (i = 0; i < nrecords; i++) { + if (info[i].kf_fd == KF_FD_TYPE_CWD) { + strlcpy(wd, info[i].kf_path, sizeof wd); + free(info); + return (wd); + } + } + + free(info); + return (NULL); +} + struct event_base * osdep_event_init(void) { |