summaryrefslogtreecommitdiffstats
path: root/linux
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
parent93a44acf7e4b0a909fbd717da8a3999c46924c3d (diff)
Move procExeBasenameOffset to main Process structure
This drops procExeLen, as that field is implicit by strlen(Process->procExe)
Diffstat (limited to 'linux')
-rw-r--r--linux/LinuxProcess.c10
-rw-r--r--linux/LinuxProcess.h2
-rw-r--r--linux/LinuxProcessList.c19
3 files changed, 17 insertions, 14 deletions
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c
index bc160186..383908e4 100644
--- a/linux/LinuxProcess.c
+++ b/linux/LinuxProcess.c
@@ -424,8 +424,8 @@ void LinuxProcess_makeCommandStr(Process* this) {
return;
}
- int exeLen = lp->procExeLen;
- int exeBasenameOffset = lp->procExeBasenameOffset;
+ int exeLen = strlen(this->procExe);
+ int exeBasenameOffset = this->procExeBasenameOffset;
int exeBasenameLen = exeLen - exeBasenameOffset;
assert(exeBasenameOffset >= 0);
@@ -700,7 +700,7 @@ static void LinuxProcess_writeField(const Process* this, RichString* str, Proces
attr = CRT_colors[Process_isUserlandThread(this) ? PROCESS_THREAD_BASENAME : PROCESS_BASENAME];
if (this->procExeDeleted)
attr = CRT_colors[FAILED_READ];
- procExe = this->procExe + lp->procExeBasenameOffset;
+ procExe = this->procExe + this->procExeBasenameOffset;
} else {
attr = CRT_colors[PROCESS_SHADOW];
procExe = Process_isKernelThread(lp) ? kthreadID : "N/A";
@@ -819,8 +819,8 @@ static int LinuxProcess_compareByKey(const Process* v1, const Process* v2, Proce
return strcmp(comm1, comm2);
}
case PROC_EXE: {
- const char *exe1 = v1->procExe ? (v1->procExe + p1->procExeBasenameOffset) : (Process_isKernelThread(p1) ? kthreadID : "");
- const char *exe2 = v2->procExe ? (v2->procExe + p2->procExeBasenameOffset) : (Process_isKernelThread(p2) ? kthreadID : "");
+ const char *exe1 = v1->procExe ? (v1->procExe + v1->procExeBasenameOffset) : (Process_isKernelThread(p1) ? kthreadID : "");
+ const char *exe2 = v2->procExe ? (v2->procExe + v2->procExeBasenameOffset) : (Process_isKernelThread(p2) ? kthreadID : "");
return strcmp(exe1, exe2);
}
case CWD:
diff --git a/linux/LinuxProcess.h b/linux/LinuxProcess.h
index a39b8408..1c884199 100644
--- a/linux/LinuxProcess.h
+++ b/linux/LinuxProcess.h
@@ -63,8 +63,6 @@ typedef struct LinuxProcessMergedCommand_ {
typedef struct LinuxProcess_ {
Process super;
- int procExeLen;
- int procExeBasenameOffset;
int procCmdlineBasenameOffset;
int procCmdlineBasenameEnd;
LinuxProcessMergedCommand mergedCommand;
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