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 TIME: Process_printTime(str, this->time); return;
case TGID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->tgid); break; case TGID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->tgid); break;
case TPGID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->tpgid); 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: { case USER: {
if (Process_getuid != this->st_uid) if (Process_getuid != this->st_uid)
attr = CRT_colors[PROCESS_SHADOW]; 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]; int attr = CRT_colors[DEFAULT_COLOR];
size_t n = sizeof(buffer) - 1; size_t n = sizeof(buffer) - 1;
switch (field) { switch (field) {
case TTY_NR: { case TTY_NR:
if (lp->ttyDevice) { if (lp->ttyDevice) {
xSnprintf(buffer, n, "%-9s", lp->ttyDevice + 5 /* skip "/dev/" */); xSnprintf(buffer, n, "%-8s ", lp->ttyDevice + 5 /* skip "/dev/" */);
} else { break;
attr = CRT_colors[PROCESS_SHADOW];
xSnprintf(buffer, n, "? ");
} }
break;
} Process_writeField(this, str, field);
return;
case CMINFLT: Process_colorNumber(str, lp->cminflt, coloring); return; case CMINFLT: Process_colorNumber(str, lp->cminflt, coloring); return;
case CMAJFLT: Process_colorNumber(str, lp->cmajflt, coloring); return; case CMAJFLT: Process_colorNumber(str, lp->cmajflt, coloring); return;
case M_DRS: Process_humanNumber(str, lp->m_drs * pageSizeKB, coloring); return; case M_DRS: Process_humanNumber(str, lp->m_drs * pageSizeKB, coloring); return;