summaryrefslogtreecommitdiffstats
path: root/darwin
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2021-05-18 23:29:57 +0200
committerBenBE <BenBE@geshi.org>2021-05-23 09:22:21 +0200
commit8ff4eb72acab360e1f5d790fa7277584ef0eae97 (patch)
treefddfd0ae34917e6942ffe0b2aafe0e3114e6a4a8 /darwin
parent7892ac68fb5b80b62abb8a5d7773cd81d77fa25e (diff)
Darwin: use merged command line helpers
Diffstat (limited to 'darwin')
-rw-r--r--darwin/DarwinProcess.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/darwin/DarwinProcess.c b/darwin/DarwinProcess.c
index efc5d9b2..49265d6f 100644
--- a/darwin/DarwinProcess.c
+++ b/darwin/DarwinProcess.c
@@ -96,11 +96,23 @@ static int DarwinProcess_compareByKey(const Process* v1, const Process* v2, Proc
}
}
-static char* DarwinProcess_getCmdLine(const struct kinfo_proc* k, int* cmdlineBasenameEnd) {
+static void DarwinProcess_updateExe(pid_t pid, Process* proc) {
+ char path[PROC_PIDPATHINFO_MAXSIZE];
+
+ int r = proc_pidpath(pid, path, sizeof(path));
+ if (r <= 0)
+ return;
+
+ Process_updateExe(proc, path);
+}
+
+static void DarwinProcess_updateCmdLine(const struct kinfo_proc* k, Process* proc) {
+ Process_updateComm(proc, k->kp_proc.p_comm);
+
/* This function is from the old Mac version of htop. Originally from ps? */
int mib[3], argmax, nargs, c = 0;
size_t size;
- char *procargs, *sp, *np, *cp, *retval;
+ char *procargs, *sp, *np, *cp;
/* Get the maximum process arguments size. */
mib[0] = CTL_KERN;
@@ -194,7 +206,7 @@ static char* DarwinProcess_getCmdLine(const struct kinfo_proc* k, int* cmdlineBa
/* Save where the argv[0] string starts. */
sp = cp;
- *cmdlineBasenameEnd = 0;
+ int end = 0;
for ( np = NULL; c < nargs && cp < &procargs[size]; cp++ ) {
if ( *cp == '\0' ) {
c++;
@@ -204,8 +216,8 @@ static char* DarwinProcess_getCmdLine(const struct kinfo_proc* k, int* cmdlineBa
}
/* Note location of current '\0'. */
np = cp;
- if (*cmdlineBasenameEnd == 0) {
- *cmdlineBasenameEnd = cp - sp;
+ if (end == 0) {
+ end = cp - sp;
}
}
}
@@ -218,26 +230,22 @@ static char* DarwinProcess_getCmdLine(const struct kinfo_proc* k, int* cmdlineBa
/* Empty or unterminated string. */
goto ERROR_B;
}
- if (*cmdlineBasenameEnd == 0) {
- *cmdlineBasenameEnd = np - sp;
+ if (end == 0) {
+ end = np - sp;
}
- /* Make a copy of the string. */
- retval = xStrdup(sp);
+ Process_updateCmdline(proc, sp, 0, end);
/* Clean up. */
free( procargs );
- return retval;
+ return;
ERROR_B:
free( procargs );
ERROR_A:
- *cmdlineBasenameEnd = -1;
-
- retval = xStrdup(k->kp_proc.p_comm);
- return retval;
+ Process_updateCmdline(proc, k->kp_proc.p_comm, 0, strlen(k->kp_proc.p_comm));
}
void DarwinProcess_setFromKInfoProc(Process* proc, const struct kinfo_proc* ps, bool exists) {
@@ -284,8 +292,8 @@ void DarwinProcess_setFromKInfoProc(Process* proc, const struct kinfo_proc* ps,
proc->starttime_ctime = ep->p_starttime.tv_sec;
Process_fillStarttimeBuffer(proc);
- proc->cmdline = DarwinProcess_getCmdLine(ps, &proc->cmdlineBasenameEnd);
- proc->mergedCommand.cmdlineChanged = true;
+ DarwinProcess_updateExe(ep->p_pid, proc);
+ DarwinProcess_updateCmdLine(ps, proc);
}
/* Mutable information */

© 2014-2024 Faster IT GmbH | imprint | privacy policy