diff options
author | Benny Baumann <BenBE@geshi.org> | 2021-05-25 19:05:16 +0200 |
---|---|---|
committer | Benny Baumann <BenBE@geshi.org> | 2021-05-25 21:55:04 +0200 |
commit | c2e25564036361b0e60ac1415dbb03528f945fe2 (patch) | |
tree | 527b2045800669c00296890bb0b620da154828a7 /dragonflybsd/DragonFlyBSDProcessList.c | |
parent | 06073699ba8728bb132763205d079ce44dd4f76d (diff) |
DragonFlyBSD: Implement CWD column
Diffstat (limited to 'dragonflybsd/DragonFlyBSDProcessList.c')
-rw-r--r-- | dragonflybsd/DragonFlyBSDProcessList.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/dragonflybsd/DragonFlyBSDProcessList.c b/dragonflybsd/DragonFlyBSDProcessList.c index d1600d63..200491ec 100644 --- a/dragonflybsd/DragonFlyBSDProcessList.c +++ b/dragonflybsd/DragonFlyBSDProcessList.c @@ -296,6 +296,26 @@ static void DragonFlyBSDProcessList_updateExe(const struct kinfo_proc* kproc, Pr Process_updateExe(proc, target); } +static void DragonFlyBSDProcessList_updateCwd(const struct kinfo_proc* kproc, Process* proc) { + const int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_CWD, kproc->kp_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 DragonFlyBSDProcessList_updateProcessName(kvm_t* kd, const struct kinfo_proc* kproc, Process* proc) { Process_updateComm(proc, kproc->kp_comm); @@ -459,6 +479,10 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) { DragonFlyBSDProcessList_updateExe(kproc, proc); DragonFlyBSDProcessList_updateProcessName(dfpl->kd, kproc, proc); + if (settings->flags & PROCESS_FLAG_CWD) { + DragonFlyBSDProcessList_updateCwd(kproc, proc); + } + ProcessList_add(super, proc); dfp->jname = DragonFlyBSDProcessList_readJailName(dfpl, kproc->kp_jailid); |