diff options
author | Benny Baumann <BenBE@geshi.org> | 2021-05-25 19:07:00 +0200 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2021-05-25 21:55:04 +0200 |
commit | 90f42695d22fdb22736936a085eaae2f438da5fd (patch) | |
tree | e1810b3ad56addcd6c272fc35317f7003e99015e /freebsd/FreeBSDProcessList.c | |
parent | c2e25564036361b0e60ac1415dbb03528f945fe2 (diff) |
FreeBSD: Implement CWD column
Diffstat (limited to 'freebsd/FreeBSDProcessList.c')
-rw-r--r-- | freebsd/FreeBSDProcessList.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/freebsd/FreeBSDProcessList.c b/freebsd/FreeBSDProcessList.c index 72aca65f..999e85ef 100644 --- a/freebsd/FreeBSDProcessList.c +++ b/freebsd/FreeBSDProcessList.c @@ -395,6 +395,26 @@ static void FreeBSDProcessList_updateExe(const struct kinfo_proc* kproc, Process Process_updateExe(proc, buffer); } +static void FreeBSDProcessList_updateCwd(const struct kinfo_proc* kproc, Process* proc) { + const int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_CWD, kproc->ki_pid }; + char buffer[2048]; + size_t size = sizeof(buffer); + if (sysctl(mib, 4, buffer, &size, NULL, 0) != 0) { + free(proc->procCwd); + proc->procCwd = NULL; + return; + } + + /* Kernel threads return an empty buffer */ + if (buffer[0] == '\0') { + free(proc->procCwd); + proc->procCwd = NULL; + return; + } + + free_and_xStrdup(&proc->procCwd, buffer); +} + static void FreeBSDProcessList_updateProcessName(kvm_t* kd, const struct kinfo_proc* kproc, Process* proc) { Process_updateComm(proc, kproc->ki_comm); @@ -495,6 +515,10 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { FreeBSDProcessList_updateExe(kproc, proc); FreeBSDProcessList_updateProcessName(fpl->kd, kproc, proc); + if (settings->flags & PROCESS_FLAG_CWD) { + FreeBSDProcessList_updateCwd(kproc, proc); + } + fp->jname = FreeBSDProcessList_readJailName(kproc); proc->tty_nr = kproc->ki_tdev; |