From a685661866bf5a082571c12d0a47286d4c1547c6 Mon Sep 17 00:00:00 2001 From: Benny Baumann Date: Mon, 1 Feb 2021 23:23:10 +0100 Subject: Move procExeBasenameOffset to main Process structure This drops procExeLen, as that field is implicit by strlen(Process->procExe) --- linux/LinuxProcessList.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'linux/LinuxProcessList.c') 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; } -- cgit v1.2.3