Refactor to tty_nr process field display

If no terminal name can be found, fall back to generic display method
with major and minor device numbers.

Print special value '(none)' in case both are zero.
This commit is contained in:
Christian Göttsche 2021-01-27 15:11:42 +01:00 committed by BenBE
parent 03d6345c89
commit a3c8285237
2 changed files with 17 additions and 8 deletions

View File

@ -365,7 +365,17 @@ void Process_writeField(const Process* this, RichString* str, ProcessField field
case TIME: Process_printTime(str, this->time); return;
case TGID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->tgid); break;
case TPGID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->tpgid); break;
case TTY_NR: xSnprintf(buffer, n, "%3u:%3u ", major(this->tty_nr), minor(this->tty_nr)); break;
case TTY_NR: {
unsigned int major = major(this->tty_nr);
unsigned int minor = minor(this->tty_nr);
if (major == 0 && minor == 0) {
attr = CRT_colors[PROCESS_SHADOW];
xSnprintf(buffer, n, "(none) ");
} else {
xSnprintf(buffer, n, "%3u:%3u ", major, minor);
}
break;
}
case USER: {
if (Process_getuid != this->st_uid)
attr = CRT_colors[PROCESS_SHADOW];

View File

@ -607,15 +607,14 @@ static void LinuxProcess_writeField(const Process* this, RichString* str, Proces
int attr = CRT_colors[DEFAULT_COLOR];
size_t n = sizeof(buffer) - 1;
switch (field) {
case TTY_NR: {
case TTY_NR:
if (lp->ttyDevice) {
xSnprintf(buffer, n, "%-9s", lp->ttyDevice + 5 /* skip "/dev/" */);
} else {
attr = CRT_colors[PROCESS_SHADOW];
xSnprintf(buffer, n, "? ");
xSnprintf(buffer, n, "%-8s ", lp->ttyDevice + 5 /* skip "/dev/" */);
break;
}
break;
}
Process_writeField(this, str, field);
return;
case CMINFLT: Process_colorNumber(str, lp->cminflt, coloring); return;
case CMAJFLT: Process_colorNumber(str, lp->cmajflt, coloring); return;
case M_DRS: Process_humanNumber(str, lp->m_drs * pageSizeKB, coloring); return;