summaryrefslogtreecommitdiffstats
path: root/linux
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2021-04-10 11:10:50 +0200
committerBenBE <BenBE@geshi.org>2021-05-23 09:22:21 +0200
commitcdb660adabada0c293ed86ebf5638d435950a03f (patch)
tree210fd0ad96f248ce0c0d9131d3d45a422957a3cf /linux
parent94a52cb5c9274fe021b3fc114180294cadb598b4 (diff)
Move mergeCommand to global process struct
Diffstat (limited to 'linux')
-rw-r--r--linux/LinuxProcess.c19
-rw-r--r--linux/LinuxProcess.h32
-rw-r--r--linux/LinuxProcessList.c24
3 files changed, 20 insertions, 55 deletions
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c
index c112ff89..5563763c 100644
--- a/linux/LinuxProcess.c
+++ b/linux/LinuxProcess.c
@@ -108,11 +108,11 @@ const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = {
* happens on what is displayed - whether comm, full path, basename, etc.. So
* this follows LinuxProcess_writeField(COMM) and LinuxProcess_writeCommand */
static const char* LinuxProcess_getCommandStr(const Process *this) {
- const LinuxProcess *lp = (const LinuxProcess *)this;
- if ((Process_isUserlandThread(this) && this->settings->showThreadNames) || !lp->mergedCommand.str) {
+ if ((Process_isUserlandThread(this) && this->settings->showThreadNames) || !this->mergedCommand.str) {
return this->cmdline;
}
- return lp->mergedCommand.str;
+
+ return this->mergedCommand.str;
}
Process* LinuxProcess_new(const Settings* settings) {
@@ -131,7 +131,6 @@ void Process_delete(Object* cast) {
#endif
free(this->cwd);
free(this->secattr);
- free(this->mergedCommand.str);
free(this);
}
@@ -307,8 +306,7 @@ LinuxProcess_writeCommand() for coloring. The merged Command string is also
returned by LinuxProcess_getCommandStr() for searching, sorting and filtering.
*/
void LinuxProcess_makeCommandStr(Process* this) {
- LinuxProcess *lp = (LinuxProcess *)this;
- LinuxProcessMergedCommand *mc = &lp->mergedCommand;
+ ProcessMergedCommand *mc = &this->mergedCommand;
const Settings* settings = this->settings;
bool showMergedCommand = settings->showMergedCommand;
@@ -502,8 +500,7 @@ void LinuxProcess_makeCommandStr(Process* this) {
static void LinuxProcess_writeCommand(const Process* this, int attr, int baseAttr, RichString* str) {
(void)baseAttr;
- const LinuxProcess *lp = (const LinuxProcess *)this;
- const LinuxProcessMergedCommand *mc = &lp->mergedCommand;
+ const ProcessMergedCommand *mc = &this->mergedCommand;
int strStart = RichString_size(str);
@@ -513,11 +510,11 @@ static void LinuxProcess_writeCommand(const Process* this, int attr, int baseAtt
const bool highlightSeparator = true;
const bool highlightDeleted = true;
- RichString_appendWide(str, attr, lp->mergedCommand.str);
+ RichString_appendWide(str, attr, this->mergedCommand.str);
for (size_t i = 0, hlCount = CLAMP(mc->highlightCount, 0, ARRAYSIZE(mc->highlights)); i < hlCount; i++)
{
- const LinuxProcessCmdlineHighlight* hl = &mc->highlights[i];
+ const ProcessCmdlineHighlight* hl = &mc->highlights[i];
if (!hl->length)
continue;
@@ -674,7 +671,7 @@ static void LinuxProcess_writeField(const Process* this, RichString* str, Proces
break;
case SECATTR: snprintf(buffer, n, "%-30s ", lp->secattr ? lp->secattr : "?"); break;
case COMM: {
- if ((Process_isUserlandThread(this) && this->settings->showThreadNames) || !lp->mergedCommand.str) {
+ if ((Process_isUserlandThread(this) && this->settings->showThreadNames) || !this->mergedCommand.str) {
Process_writeField(this, str, field);
} else {
LinuxProcess_writeCommandField(this, str, buffer, n, attr);
diff --git a/linux/LinuxProcess.h b/linux/LinuxProcess.h
index 443e33c1..4a52807e 100644
--- a/linux/LinuxProcess.h
+++ b/linux/LinuxProcess.h
@@ -30,40 +30,8 @@ in the source distribution for its full text.
#define PROCESS_FLAG_LINUX_CWD 0x00020000
#define PROCESS_FLAG_LINUX_DELAYACCT 0x00040000
-
-/* Holds information about regions of the cmdline that should be
- * highlighted (e.g. program basename, delimiter, comm). */
-typedef struct LinuxProcessCmdlineHighlight_
-{
- size_t offset; /* first character to highlight */
- size_t length; /* How many characters to highlight, zero if unused */
- int attr; /* The attributes used to highlight */
- int flags; /* Special flags used for selective highlighting, zero for always */
-} LinuxProcessCmdlineHighlight;
-
-/* LinuxProcessMergedCommand is populated by LinuxProcess_makeCommandStr: It
- * contains the merged Command string, and the information needed by
- * LinuxProcess_writeCommand to color the string. str will be NULL for kernel
- * threads and zombies */
-typedef struct LinuxProcessMergedCommand_ {
- char *str; /* merged Command string */
- size_t maxLen; /* maximum expected length of Command string */
- size_t highlightCount; /* how many portions of cmdline to highlight */
- LinuxProcessCmdlineHighlight highlights[8]; /* which portions of cmdline to highlight */
- bool separateComm : 1; /* whether comm is a separate field */
- bool unmatchedExe : 1; /* whether exe matched with cmdline */
- bool cmdlineChanged : 1; /* whether cmdline changed */
- bool exeChanged : 1; /* whether exe changed */
- bool commChanged : 1; /* whether comm changed */
- bool prevMergeSet : 1; /* whether showMergedCommand was set */
- bool prevPathSet : 1; /* whether showProgramPath was set */
- bool prevCommSet : 1; /* whether findCommInCmdline was set */
- bool prevCmdlineSet : 1; /* whether stripExeFromCmdline was set */
-} LinuxProcessMergedCommand;
-
typedef struct LinuxProcess_ {
Process super;
- LinuxProcessMergedCommand mergedCommand;
bool isKernelThread;
IOPriority ioPriority;
unsigned long int cminflt;
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index fc9e58eb..c2effbfc 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -1130,27 +1130,27 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc
tokenEnd = lastChar + 1;
}
- LinuxProcess *lp = (LinuxProcess *)process;
- lp->mergedCommand.maxLen = lastChar + 1; /* accommodate cmdline */
+ ProcessMergedCommand *mc = &process->mergedCommand;
+ mc->maxLen = lastChar + 1; /* accommodate cmdline */
if (!process->cmdline || !String_eq(command, process->cmdline)) {
free_and_xStrdup(&process->cmdline, command);
process->cmdlineBasenameStart = tokenStart;
process->cmdlineBasenameEnd = tokenEnd;
- lp->mergedCommand.cmdlineChanged = true;
+ mc->cmdlineChanged = true;
}
/* /proc/[pid]/comm could change, so should be updated */
if ((amtRead = xReadfileat(procFd, "comm", command, sizeof(command))) > 0) {
command[amtRead - 1] = '\0';
- lp->mergedCommand.maxLen += amtRead - 1; /* accommodate comm */
+ mc->maxLen += amtRead - 1; /* accommodate comm */
if (!process->procComm || !String_eq(command, process->procComm)) {
free_and_xStrdup(&process->procComm, command);
- lp->mergedCommand.commChanged = true;
+ mc->commChanged = true;
}
} else if (process->procComm) {
free(process->procComm);
process->procComm = NULL;
- lp->mergedCommand.commChanged = true;
+ mc->commChanged = true;
}
char filename[MAX_NAME + 1];
@@ -1165,7 +1165,7 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc
#endif
if (amtRead > 0) {
filename[amtRead] = 0;
- lp->mergedCommand.maxLen += amtRead; /* accommodate exe */
+ mc->maxLen += amtRead; /* accommodate exe */
if (!process->procExe ||
(!process->procExeDeleted && !String_eq(filename, process->procExe)) ||
(process->procExeDeleted && !String_startsWith(filename, process->procExe))) {
@@ -1176,7 +1176,7 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc
;
process->procExeBasenameOffset = amtRead + 1;
- lp->mergedCommand.exeChanged = true;
+ mc->exeChanged = true;
const char* deletedMarker = " (deleted)";
if (strlen(process->procExe) > strlen(deletedMarker)) {
@@ -1195,7 +1195,7 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc
process->procExe = NULL;
process->procExeBasenameOffset = 0;
process->procExeDeleted = false;
- lp->mergedCommand.exeChanged = true;
+ mc->exeChanged = true;
}
return true;
@@ -1429,7 +1429,7 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_
* - not a zombie or it became zombie under htop's watch, and
* - not a user thread or if showThreadNames is not set */
if (!Process_isKernelThread(proc) &&
- (proc->state != 'Z' || lp->mergedCommand.str) &&
+ (proc->state != 'Z' || proc->mergedCommand.str) &&
(!Process_isUserlandThread(proc) || !settings->showThreadNames)) {
LinuxProcess_makeCommandStr(proc);
}
@@ -1464,13 +1464,13 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_
proc->cmdlineBasenameEnd = -1;
free_and_xStrdup(&proc->cmdline, command);
proc->cmdlineBasenameStart = 0;
- lp->mergedCommand.commChanged = true;
+ proc->mergedCommand.commChanged = true;
} else if (Process_isThread(proc)) {
if (settings->showThreadNames || Process_isKernelThread(proc)) {
proc->cmdlineBasenameEnd = -1;
free_and_xStrdup(&proc->cmdline, command);
proc->cmdlineBasenameStart = 0;
- lp->mergedCommand.commChanged = true;
+ proc->mergedCommand.commChanged = true;
}
if (Process_isKernelThread(proc)) {

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