diff options
author | Benny Baumann <BenBE@geshi.org> | 2021-02-01 23:23:10 +0100 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2021-05-23 09:22:21 +0200 |
commit | a685661866bf5a082571c12d0a47286d4c1547c6 (patch) | |
tree | 64c5efa21bbc1e1e5316d78bbe0dd5182c6ac823 /linux/LinuxProcessList.c | |
parent | 93a44acf7e4b0a909fbd717da8a3999c46924c3d (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.c | 19 |
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; } |