summaryrefslogtreecommitdiffstats
path: root/linux/LinuxProcessList.c
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2021-02-01 23:23:10 +0100
committerBenBE <BenBE@geshi.org>2021-05-23 09:22:21 +0200
commita685661866bf5a082571c12d0a47286d4c1547c6 (patch)
tree64c5efa21bbc1e1e5316d78bbe0dd5182c6ac823 /linux/LinuxProcessList.c
parent93a44acf7e4b0a909fbd717da8a3999c46924c3d (diff)
Move procExeBasenameOffset to main Process structure
This drops procExeLen, as that field is implicit by strlen(Process->procExe)
Diffstat (limited to 'linux/LinuxProcessList.c')
-rw-r--r--linux/LinuxProcessList.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index dfe14dde..97ba9cc0 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -1167,29 +1167,34 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc
if (amtRead > 0) {
filename[amtRead] = 0;
lp->mergedCommand.maxLen += amtRead; /* accommodate exe */
- if (!process->procExe || !String_eq(filename, process->procExe)) {
+ if (!process->procExe ||
+ (!process->procExeDeleted && !String_eq(filename, process->procExe)) ||
+ (process->procExeDeleted && !String_startsWith(filename, process->procExe))) {
free_and_xStrdup(&process->procExe, filename);
- lp->procExeLen = amtRead;
+
/* exe is guaranteed to contain at least one /, but validate anyway */
while (amtRead && filename[--amtRead] != '/')
;
- lp->procExeBasenameOffset = amtRead + 1;
+
+ process->procExeBasenameOffset = amtRead + 1;
lp->mergedCommand.exeChanged = true;
const char* deletedMarker = " (deleted)";
if (strlen(process->procExe) > strlen(deletedMarker)) {
process->procExeDeleted = String_eq(process->procExe + strlen(process->procExe) - strlen(deletedMarker), deletedMarker);
- if (process->procExeDeleted && strlen(process->procExe) - strlen(deletedMarker) == 1 && process->procExe[0] == '/') {
- lp->procExeBasenameOffset = 0;
+ if (process->procExeDeleted) {
+ process->procExe[strlen(process->procExe) - strlen(deletedMarker)] = '\0';
+
+ if (String_eq(process->procExe, "/"))
+ process->procExeBasenameOffset = 0;
}
}
}
} else if (process->procExe) {
free(process->procExe);
process->procExe = NULL;
- lp->procExeLen = 0;
- lp->procExeBasenameOffset = 0;
+ process->procExeBasenameOffset = 0;
process->procExeDeleted = false;
lp->mergedCommand.exeChanged = true;
}

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