diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index 599ade07d240..0fa08afc8adc 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -94,17 +94,20 @@ static const char io_header[] = static const char io_Proc_format[] = "%5d%*s %-*.*s %6ld %6ld %6ld %6ld %6ld %6ld %6.2f%% %.*s"; +/* XXX: build up header instead of statically defining them. + * This will also allow for a "format string" to be supplied + * as an argument to top(1) instead of having predefined options */ static const char smp_header_thr_and_pid[] = - " PID%*s %-*.*s THR PRI NICE SIZE RES%*s STATE C TIME %7s COMMAND"; -static const char smp_header_tid_only[] = - " THR%*s %-*.*s " "PRI NICE SIZE RES%*s STATE C TIME %7s COMMAND"; + " %s%*s %-*.*s THR PRI NICE SIZE RES%*s STATE C TIME %7s COMMAND"; +static const char smp_header_id_only[] = + " %s%*s %-*.*s PRI NICE SIZE RES%*s STATE C TIME %7s COMMAND"; static const char smp_Proc_format[] = "%5d%*s %-*.*s %s%3d %4s%7s %6s%*.*s %-6.6s %2d%7s %6.2f%% %.*s"; static char up_header_thr_and_pid[] = " PID%*s %-*.*s THR PRI NICE SIZE RES%*s STATE TIME %7s COMMAND"; -static char up_header_tid_only[] = - " THR%*s %-*.*s " "PRI NICE SIZE RES%*s STATE TIME %7s COMMAND"; +static char up_header_id_only[] = + " %s%*s %-*.*s PRI NICE SIZE RES%*s STATE TIME %7s COMMAND"; static char up_Proc_format[] = "%5d%*s %-*.*s %s%3d %4s%7s %6s%*.*s %-6.6s%.0d%7s %6.2f%% %.*s"; @@ -425,19 +428,31 @@ format_header(const char *uname_field) switch (displaymode) { case DISP_CPU: /* - * The logic of picking the right header format seems reverse - * here because we only want to display a THR column when - * "thread mode" is off (and threads are not listed as - * separate lines). + * The logic of picking the right header is confusing, and + * depends on too much. We should instead have a struct of + * "header name", and "header format" which we build up. + * This would also fix the duplicate of effort into up vs smp + * mode. */ - prehead = smpmode ? - (ps.thread_id ? smp_header_tid_only : smp_header_thr_and_pid) : - (ps.thread_id ? up_header_tid_only : up_header_thr_and_pid); - snprintf(Header, sizeof(Header), prehead, - jidlength, ps.jail ? " JID" : "", - namelength, namelength, uname_field, - swaplength, ps.swap ? " SWAP" : "", - ps.wcpu ? "WCPU" : "CPU"); + if (smpmode) { + prehead = ps.thread ? + smp_header_id_only : smp_header_thr_and_pid; + snprintf(Header, sizeof(Header), prehead, + ps.thread_id ? " THR" : "PID", + jidlength, ps.jail ? " JID" : "", + namelength, namelength, uname_field, + swaplength, ps.swap ? " SWAP" : "", + ps.wcpu ? "WCPU" : "CPU"); + } else { + prehead = ps.thread ? + up_header_id_only : up_header_thr_and_pid; + snprintf(Header, sizeof(Header), prehead, + ps.thread_id ? " THR" : "PID", + jidlength, ps.jail ? " JID" : "", + namelength, namelength, uname_field, + swaplength, ps.swap ? " SWAP" : "", + ps.wcpu ? "WCPU" : "CPU"); + } break; case DISP_IO: prehead = io_header;