git: 490f251bf90d - main - ps(1): Move 'width' field from VAR to VARENT; Remove sizevars()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 28 Apr 2025 12:23:24 UTC
The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=490f251bf90dbfda8043e2d1f4a71dd3a91a8628 commit 490f251bf90dbfda8043e2d1f4a71dd3a91a8628 Author: Olivier Certner <olce@FreeBSD.org> AuthorDate: 2025-02-28 18:30:54 +0000 Commit: Olivier Certner <olce@FreeBSD.org> CommitDate: 2025-04-28 11:56:33 +0000 ps(1): Move 'width' field from VAR to VARENT; Remove sizevars() Some column's width depends not only on the information displayed but also on the its header, which may have been customized. Consequently, that width is a property of the actual column and should not be attached to the keyword specifying which information to print. This change fixes a bug where multiple columns displaying the same information (same keyword) but with different headers would have the same width, although they should not if they have long enough headers that have different lengths (the width computed from the largest header would be applied to all the corresponding keyword's columns). Remove sizevars(), as the 'width' field is now initialized directly in parsefmt(), which creates the VARENT structures. While here, remove var[]'s sentinel line, and consequently adjust the upper limit in showkey()'s loop and findvar()'s binary search. MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49610 --- bin/ps/keyword.c | 238 +++++++++++++++++++++++++++---------------------------- bin/ps/print.c | 4 +- bin/ps/ps.c | 26 +----- bin/ps/ps.h | 3 +- 4 files changed, 126 insertions(+), 145 deletions(-) diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 59011c906175..f3ff567f2d57 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -58,188 +58,187 @@ static int vcmp(const void *, const void *); /* PLEASE KEEP THE TABLE BELOW SORTED ALPHABETICALLY!!! */ static VAR var[] = { - {"%cpu", "%CPU", NULL, "percent-cpu", 0, pcpu, 0, CHAR, NULL, 0}, - {"%mem", "%MEM", NULL, "percent-memory", 0, pmem, 0, CHAR, NULL, 0}, + {"%cpu", "%CPU", NULL, "percent-cpu", 0, pcpu, 0, CHAR, NULL}, + {"%mem", "%MEM", NULL, "percent-memory", 0, pmem, 0, CHAR, NULL}, {"acflag", "ACFLG", NULL, "accounting-flag", 0, kvar, KOFF(ki_acflag), - USHORT, "x", 0}, - {"acflg", "", "acflag", NULL, 0, NULL, 0, CHAR, NULL, 0}, + USHORT, "x"}, + {"acflg", "", "acflag", NULL, 0, NULL, 0, CHAR, NULL}, {"args", "COMMAND", NULL, "arguments", COMM|LJUST|USER, arguments, 0, - CHAR, NULL, 0}, - {"blocked", "", "sigmask", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"caught", "", "sigcatch", NULL, 0, NULL, 0, CHAR, NULL, 0}, + CHAR, NULL}, + {"blocked", "", "sigmask", NULL, 0, NULL, 0, CHAR, NULL}, + {"caught", "", "sigcatch", NULL, 0, NULL, 0, CHAR, NULL}, {"class", "CLASS", NULL, "login-class", LJUST, loginclass, 0, CHAR, - NULL, 0}, - {"comm", "COMMAND", NULL, "command", LJUST, ucomm, 0, CHAR, NULL, 0}, + NULL}, + {"comm", "COMMAND", NULL, "command", LJUST, ucomm, 0, CHAR, NULL}, {"command", "COMMAND", NULL, "command", COMM|LJUST|USER, command, 0, - CHAR, NULL, 0}, + CHAR, NULL}, {"cow", "COW", NULL, "copy-on-write-faults", 0, kvar, KOFF(ki_cow), - UINT, "u", 0}, - {"cpu", "C", NULL, "on-cpu", 0, cpunum, 0, CHAR, NULL, 0}, - {"cputime", "", "time", NULL, 0, NULL, 0, CHAR, NULL, 0}, + UINT, "u"}, + {"cpu", "C", NULL, "on-cpu", 0, cpunum, 0, CHAR, NULL}, + {"cputime", "", "time", NULL, 0, NULL, 0, CHAR, NULL}, {"dsiz", "DSIZ", NULL, "data-size", 0, kvar, KOFF(ki_dsize), PGTOK, - "ld", 0}, - {"egid", "", "gid", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"egroup", "", "group", NULL, 0, NULL, 0, CHAR, NULL, 0}, + "ld"}, + {"egid", "", "gid", NULL, 0, NULL, 0, CHAR, NULL}, + {"egroup", "", "group", NULL, 0, NULL, 0, CHAR, NULL}, {"emul", "EMUL", NULL, "emulation-envirnment", LJUST, emulname, 0, - CHAR, NULL, 0}, + CHAR, NULL}, {"etime", "ELAPSED", NULL, "elapsed-time", USER, elapsed, 0, CHAR, - NULL, 0}, + NULL}, {"etimes", "ELAPSED", NULL, "elapsed-times", USER, elapseds, 0, CHAR, - NULL, 0}, - {"euid", "", "uid", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"f", "F", NULL, "flags", 0, kvar, KOFF(ki_flag), LONG, "lx", 0}, - {"f2", "F2", NULL, "flags2", 0, kvar, KOFF(ki_flag2), INT, "08x", 0}, - {"fib", "FIB", NULL, "fib", 0, kvar, KOFF(ki_fibnum), INT, "d", 0}, - {"flags", "", "f", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"flags2", "", "f2", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"gid", "GID", NULL, "gid", 0, kvar, KOFF(ki_groups), UINT, UIDFMT, 0}, - {"group", "GROUP", NULL, "group", LJUST, egroupname, 0, CHAR, NULL, 0}, - {"ignored", "", "sigignore", NULL, 0, NULL, 0, CHAR, NULL, 0}, + NULL}, + {"euid", "", "uid", NULL, 0, NULL, 0, CHAR, NULL}, + {"f", "F", NULL, "flags", 0, kvar, KOFF(ki_flag), LONG, "lx"}, + {"f2", "F2", NULL, "flags2", 0, kvar, KOFF(ki_flag2), INT, "08x"}, + {"fib", "FIB", NULL, "fib", 0, kvar, KOFF(ki_fibnum), INT, "d"}, + {"flags", "", "f", NULL, 0, NULL, 0, CHAR, NULL}, + {"flags2", "", "f2", NULL, 0, NULL, 0, CHAR, NULL}, + {"gid", "GID", NULL, "gid", 0, kvar, KOFF(ki_groups), UINT, UIDFMT}, + {"group", "GROUP", NULL, "group", LJUST, egroupname, 0, CHAR, NULL}, + {"ignored", "", "sigignore", NULL, 0, NULL, 0, CHAR, NULL}, {"inblk", "INBLK", NULL, "read-blocks", USER, rvar, ROFF(ru_inblock), - LONG, "ld", 0}, - {"inblock", "", "inblk", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"jail", "JAIL", NULL, "jail-name", LJUST, jailname, 0, CHAR, NULL, 0}, - {"jid", "JID", NULL, "jail-id", 0, kvar, KOFF(ki_jid), INT, "d", 0}, + LONG, "ld"}, + {"inblock", "", "inblk", NULL, 0, NULL, 0, CHAR, NULL}, + {"jail", "JAIL", NULL, "jail-name", LJUST, jailname, 0, CHAR, NULL}, + {"jid", "JID", NULL, "jail-id", 0, kvar, KOFF(ki_jid), INT, "d"}, {"jobc", "JOBC", NULL, "job-control-count", 0, kvar, KOFF(ki_jobc), - SHORT, "d", 0}, + SHORT, "d"}, {"ktrace", "KTRACE", NULL, "ktrace", 0, kvar, KOFF(ki_traceflag), INT, - "x", 0}, - {"label", "LABEL", NULL, "label", LJUST, label, 0, CHAR, NULL, 0}, - {"lim", "LIM", NULL, "memory-limit", 0, maxrss, 0, CHAR, NULL, 0}, - {"lockname", "LOCK", NULL, "lock-name", LJUST, lockname, 0, CHAR, NULL, - 0}, - {"login", "LOGIN", NULL, "login-name", LJUST, logname, 0, CHAR, NULL, - 0}, - {"logname", "", "login", NULL, 0, NULL, 0, CHAR, NULL, 0}, + "x"}, + {"label", "LABEL", NULL, "label", LJUST, label, 0, CHAR, NULL}, + {"lim", "LIM", NULL, "memory-limit", 0, maxrss, 0, CHAR, NULL}, + {"lockname", "LOCK", NULL, "lock-name", LJUST, lockname, 0, CHAR, NULL}, + {"login", "LOGIN", NULL, "login-name", LJUST, logname, 0, CHAR, NULL}, + {"logname", "", "login", NULL, 0, NULL, 0, CHAR, NULL}, {"lstart", "STARTED", NULL, "start-time", LJUST|USER, lstarted, 0, - CHAR, NULL, 0}, + CHAR, NULL}, {"lwp", "LWP", NULL, "thread-id", 0, kvar, KOFF(ki_tid), UINT, - LWPFMT, 0}, + LWPFMT}, {"majflt", "MAJFLT", NULL, "major-faults", USER, rvar, ROFF(ru_majflt), - LONG, "ld", 0}, + LONG, "ld"}, {"minflt", "MINFLT", NULL, "minor-faults", USER, rvar, ROFF(ru_minflt), - LONG, "ld", 0}, + LONG, "ld"}, {"msgrcv", "MSGRCV", NULL, "received-messages", USER, rvar, - ROFF(ru_msgrcv), LONG, "ld", 0}, + ROFF(ru_msgrcv), LONG, "ld"}, {"msgsnd", "MSGSND", NULL, "sent-messages", USER, rvar, - ROFF(ru_msgsnd), LONG, "ld", 0}, + ROFF(ru_msgsnd), LONG, "ld"}, {"mwchan", "MWCHAN", NULL, "wait-channel", LJUST, mwchan, 0, CHAR, - NULL, 0}, - {"ni", "", "nice", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"nice", "NI", NULL, "nice", 0, kvar, KOFF(ki_nice), CHAR, "d", 0}, + NULL}, + {"ni", "", "nice", NULL, 0, NULL, 0, CHAR, NULL}, + {"nice", "NI", NULL, "nice", 0, kvar, KOFF(ki_nice), CHAR, "d"}, {"nivcsw", "NIVCSW", NULL, "involuntary-context-switches", USER, rvar, - ROFF(ru_nivcsw), LONG, "ld", 0}, + ROFF(ru_nivcsw), LONG, "ld"}, {"nlwp", "NLWP", NULL, "threads", 0, kvar, KOFF(ki_numthreads), UINT, - NLWPFMT, 0}, - {"nsignals", "", "nsigs", NULL, 0, NULL, 0, CHAR, NULL, 0}, + NLWPFMT}, + {"nsignals", "", "nsigs", NULL, 0, NULL, 0, CHAR, NULL}, {"nsigs", "NSIGS", NULL, "signals-taken", USER, rvar, - ROFF(ru_nsignals), LONG, "ld", 0}, + ROFF(ru_nsignals), LONG, "ld"}, {"nswap", "NSWAP", NULL, "swaps", USER, rvar, ROFF(ru_nswap), LONG, - "ld", 0}, + "ld"}, {"nvcsw", "NVCSW", NULL, "voluntary-context-switches", USER, rvar, - ROFF(ru_nvcsw), LONG, "ld", 0}, + ROFF(ru_nvcsw), LONG, "ld"}, {"nwchan", "NWCHAN", NULL, "wait-channel-address", LJUST, nwchan, 0, - CHAR, NULL, 0}, + CHAR, NULL}, {"oublk", "OUBLK", NULL, "written-blocks", USER, rvar, - ROFF(ru_oublock), LONG, "ld", 0}, - {"oublock", "", "oublk", NULL, 0, NULL, 0, CHAR, NULL, 0}, + ROFF(ru_oublock), LONG, "ld"}, + {"oublock", "", "oublk", NULL, 0, NULL, 0, CHAR, NULL}, {"paddr", "PADDR", NULL, "process-address", 0, kvar, KOFF(ki_paddr), - KPTR, "lx", 0}, - {"pagein", "PAGEIN", NULL, "pageins", USER, pagein, 0, CHAR, NULL, 0}, - {"pcpu", "", "%cpu", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"pending", "", "sig", NULL, 0, NULL, 0, CHAR, NULL, 0}, + KPTR, "lx"}, + {"pagein", "PAGEIN", NULL, "pageins", USER, pagein, 0, CHAR, NULL}, + {"pcpu", "", "%cpu", NULL, 0, NULL, 0, CHAR, NULL}, + {"pending", "", "sig", NULL, 0, NULL, 0, CHAR, NULL}, {"pgid", "PGID", NULL, "process-group", 0, kvar, KOFF(ki_pgid), UINT, - PIDFMT, 0}, - {"pid", "PID", NULL, "pid", 0, kvar, KOFF(ki_pid), UINT, PIDFMT, 0}, - {"pmem", "", "%mem", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"ppid", "PPID", NULL, "ppid", 0, kvar, KOFF(ki_ppid), UINT, PIDFMT, 0}, - {"pri", "PRI", NULL, "priority", 0, pri, 0, CHAR, NULL, 0}, + PIDFMT}, + {"pid", "PID", NULL, "pid", 0, kvar, KOFF(ki_pid), UINT, PIDFMT}, + {"pmem", "", "%mem", NULL, 0, NULL, 0, CHAR, NULL}, + {"ppid", "PPID", NULL, "ppid", 0, kvar, KOFF(ki_ppid), UINT, PIDFMT}, + {"pri", "PRI", NULL, "priority", 0, pri, 0, CHAR, NULL}, {"re", "RE", NULL, "residency-time", INF127, kvar, KOFF(ki_swtime), - UINT, "d", 0}, + UINT, "d"}, {"rgid", "RGID", NULL, "real-gid", 0, kvar, KOFF(ki_rgid), UINT, - UIDFMT, 0}, + UIDFMT}, {"rgroup", "RGROUP", NULL, "real-group", LJUST, rgroupname, 0, CHAR, - NULL, 0}, - {"rss", "RSS", NULL, "rss", 0, kvar, KOFF(ki_rssize), PGTOK, "ld", 0}, + NULL}, + {"rss", "RSS", NULL, "rss", 0, kvar, KOFF(ki_rssize), PGTOK, "ld"}, {"rtprio", "RTPRIO", NULL, "realtime-priority", 0, priorityr, - KOFF(ki_pri), CHAR, NULL, 0}, + KOFF(ki_pri), CHAR, NULL}, {"ruid", "RUID", NULL, "real-uid", 0, kvar, KOFF(ki_ruid), UINT, - UIDFMT, 0}, - {"ruser", "RUSER", NULL, "real-user", LJUST, runame, 0, CHAR, NULL, 0}, - {"sid", "SID", NULL, "sid", 0, kvar, KOFF(ki_sid), UINT, PIDFMT, 0}, + UIDFMT}, + {"ruser", "RUSER", NULL, "real-user", LJUST, runame, 0, CHAR, NULL}, + {"sid", "SID", NULL, "sid", 0, kvar, KOFF(ki_sid), UINT, PIDFMT}, {"sig", "PENDING", NULL, "signals-pending", 0, kvar, KOFF(ki_siglist), - INT, "x", 0}, + INT, "x"}, {"sigcatch", "CAUGHT", NULL, "signals-caught", 0, kvar, - KOFF(ki_sigcatch), UINT, "x", 0}, + KOFF(ki_sigcatch), UINT, "x"}, {"sigignore", "IGNORED", NULL, "signals-ignored", 0, kvar, - KOFF(ki_sigignore), UINT, "x", 0}, + KOFF(ki_sigignore), UINT, "x"}, {"sigmask", "BLOCKED", NULL, "signal-mask", 0, kvar, KOFF(ki_sigmask), - UINT, "x", 0}, + UINT, "x"}, {"sl", "SL", NULL, "sleep-time", INF127, kvar, KOFF(ki_slptime), UINT, - "d", 0}, + "d"}, {"ssiz", "SSIZ", NULL, "stack-size", 0, kvar, KOFF(ki_ssize), PGTOK, - "ld", 0}, + "ld"}, {"start", "STARTED", NULL, "start-time", LJUST|USER, started, 0, CHAR, - NULL, 0}, - {"stat", "", "state", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"state", "STAT", NULL, "state", LJUST, state, 0, CHAR, NULL, 0}, + NULL}, + {"stat", "", "state", NULL, 0, NULL, 0, CHAR, NULL}, + {"state", "STAT", NULL, "state", LJUST, state, 0, CHAR, NULL}, {"svgid", "SVGID", NULL, "saved-gid", 0, kvar, KOFF(ki_svgid), UINT, - UIDFMT, 0}, + UIDFMT}, {"svuid", "SVUID", NULL, "saved-uid", 0, kvar, KOFF(ki_svuid), UINT, - UIDFMT, 0}, + UIDFMT}, {"systime", "SYSTIME", NULL, "system-time", USER, systime, 0, CHAR, - NULL, 0}, + NULL}, {"tdaddr", "TDADDR", NULL, "thread-address", 0, kvar, KOFF(ki_tdaddr), - KPTR, "lx", 0}, - {"tdev", "TDEV", NULL, "terminal-device", 0, tdev, 0, CHAR, NULL, 0}, - {"tdnam", "", "tdname", NULL, 0, NULL, 0, CHAR, NULL, 0}, + KPTR, "lx"}, + {"tdev", "TDEV", NULL, "terminal-device", 0, tdev, 0, CHAR, NULL}, + {"tdnam", "", "tdname", NULL, 0, NULL, 0, CHAR, NULL}, {"tdname", "TDNAME", NULL, "thread-name", LJUST, tdnam, 0, CHAR, - NULL, 0}, - {"tid", "", "lwp", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"time", "TIME", NULL, "cpu-time", USER, cputime, 0, CHAR, NULL, 0}, + NULL}, + {"tid", "", "lwp", NULL, 0, NULL, 0, CHAR, NULL}, + {"time", "TIME", NULL, "cpu-time", USER, cputime, 0, CHAR, NULL}, {"tpgid", "TPGID", NULL, "terminal-process-gid", 0, kvar, - KOFF(ki_tpgid), UINT, PIDFMT, 0}, + KOFF(ki_tpgid), UINT, PIDFMT}, {"tracer", "TRACER", NULL, "tracer", 0, kvar, KOFF(ki_tracer), UINT, - PIDFMT, 0}, + PIDFMT}, {"tsid", "TSID", NULL, "terminal-sid", 0, kvar, KOFF(ki_tsid), UINT, - PIDFMT, 0}, + PIDFMT}, {"tsiz", "TSIZ", NULL, "text-size", 0, kvar, KOFF(ki_tsize), PGTOK, - "ld", 0}, - {"tt", "TT ", NULL, "terminal-name", 0, tname, 0, CHAR, NULL, 0}, - {"tty", "TTY", NULL, "tty", LJUST, longtname, 0, CHAR, NULL, 0}, + "ld"}, + {"tt", "TT ", NULL, "terminal-name", 0, tname, 0, CHAR, NULL}, + {"tty", "TTY", NULL, "tty", LJUST, longtname, 0, CHAR, NULL}, {"ucomm", "UCOMM", NULL, "accounting-name", LJUST, ucomm, 0, CHAR, - NULL, 0}, - {"uid", "UID", NULL, "uid", 0, kvar, KOFF(ki_uid), UINT, UIDFMT, 0}, - {"upr", "UPR", NULL, "user-priority", 0, upr, 0, CHAR, NULL, 0}, + NULL}, + {"uid", "UID", NULL, "uid", 0, kvar, KOFF(ki_uid), UINT, UIDFMT}, + {"upr", "UPR", NULL, "user-priority", 0, upr, 0, CHAR, NULL}, {"uprocp", "UPROCP", NULL, "process-address", 0, kvar, KOFF(ki_paddr), - KPTR, "lx", 0}, - {"user", "USER", NULL, "user", LJUST, username, 0, CHAR, NULL, 0}, + KPTR, "lx"}, + {"user", "USER", NULL, "user", LJUST, username, 0, CHAR, NULL}, {"usertime", "USERTIME", NULL, "user-time", USER, usertime, 0, CHAR, - NULL, 0}, - {"usrpri", "", "upr", NULL, 0, NULL, 0, CHAR, NULL, 0}, + NULL}, + {"usrpri", "", "upr", NULL, 0, NULL, 0, CHAR, NULL}, {"vmaddr", "VMADDR", NULL, "vmspace-address", 0, kvar, KOFF(ki_vmspace), - KPTR, "lx", 0}, - {"vsize", "", "vsz", NULL, 0, NULL, 0, CHAR, NULL, 0}, - {"vsz", "VSZ", NULL, "virtual-size", 0, vsize, 0, CHAR, NULL, 0}, - {"wchan", "WCHAN", NULL, "wait-channel", LJUST, wchan, 0, CHAR, NULL, - 0}, + KPTR, "lx"}, + {"vsize", "", "vsz", NULL, 0, NULL, 0, CHAR, NULL}, + {"vsz", "VSZ", NULL, "virtual-size", 0, vsize, 0, CHAR, NULL}, + {"wchan", "WCHAN", NULL, "wait-channel", LJUST, wchan, 0, CHAR, NULL}, {"xstat", "XSTAT", NULL, "exit-status", 0, kvar, KOFF(ki_xstat), - USHORT, "x", 0}, - {"", NULL, NULL, NULL, 0, NULL, 0, CHAR, NULL, 0}, + USHORT, "x"}, }; void showkey(void) { - VAR *v; + const VAR *v; + const VAR *const end = var + nitems(var); + const char *sep; int i; - const char *p, *sep; i = 0; sep = ""; xo_open_list("key"); - for (v = var; *(p = v->name); ++v) { - int len = strlen(p); + for (v = var; v < end; ++v) { + const char *const p = v->name; + const int len = strlen(p); + if (termwidth && (i += len + 1) > termwidth) { i = len; sep = "\n"; @@ -299,6 +298,7 @@ parsefmt(const char *p, struct velisthead *const var_list, if (hp) vent->header = hp; } + vent->width = strlen(vent->header); vent->var = malloc(sizeof(*vent->var)); if (vent->var == NULL) xo_errx(1, "malloc failed"); @@ -325,7 +325,7 @@ findvar(char *p, struct velisthead *const var_list, int user, char **header) *hp++ = '\0'; key.name = p; - v = bsearch(&key, var, sizeof(var)/sizeof(VAR) - 1, sizeof(VAR), vcmp); + v = bsearch(&key, var, nitems(var), sizeof(VAR), vcmp); if (v && v->alias) { /* diff --git a/bin/ps/print.c b/bin/ps/print.c index 13ef646ea462..005268b30d8c 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -81,9 +81,9 @@ printheader(void) if (STAILQ_NEXT(vent, next_ve) == NULL) /* last one */ xo_emit("{T:/%hs}", vent->header); else - xo_emit("{T:/%-*hs}", v->width, vent->header); + xo_emit("{T:/%-*hs}", vent->width, vent->header); } else - xo_emit("{T:/%*hs}", v->width, vent->header); + xo_emit("{T:/%*hs}", vent->width, vent->header); if (STAILQ_NEXT(vent, next_ve) != NULL) xo_emit("{P: }"); } diff --git a/bin/ps/ps.c b/bin/ps/ps.c index 2a94b4c37f31..db3826c958c6 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -130,7 +130,6 @@ static char *kludge_oldps_options(const char *, char *, const char *); static int pscomp(const void *, const void *); static void saveuser(KINFO *); static void scanvars(void); -static void sizevars(void); static void pidmax_init(void); static void usage(void); @@ -635,8 +634,6 @@ main(int argc, char *argv[]) } } - sizevars(); - if (nkept == 0) { printheader(); if (xo_finish() < 0) @@ -695,7 +692,7 @@ main(int argc, char *argv[]) /* No padding for the last column, if it's LJUST. */ fwidthmin = (xo_get_style(NULL) != XO_STYLE_TEXT || (STAILQ_NEXT(vent, next_ve) == NULL && - (vent->var->flag & LJUST))) ? 0 : vent->var->width; + (vent->var->flag & LJUST))) ? 0 : vent->width; snprintf(fmtbuf, sizeof(fmtbuf), "{:%s/%%%s%d..%dhs}", vent->var->field ? vent->var->field : vent->var->name, (vent->var->flag & LJUST) ? "-" : "", @@ -1213,7 +1210,7 @@ format_output(KINFO *ki) VAR *v; KINFO_STR *ks; char *str; - int len; + u_int len; STAILQ_INIT(&ki->ki_ks); STAILQ_FOREACH(vent, &varlist, next_ve) { @@ -1228,23 +1225,8 @@ format_output(KINFO *ki) len = strlen(str); } else len = 1; /* "-" */ - if (v->width < len) - v->width = len; - } -} - -static void -sizevars(void) -{ - struct varent *vent; - VAR *v; - int i; - - STAILQ_FOREACH(vent, &varlist, next_ve) { - v = vent->var; - i = strlen(vent->header); - if (v->width < i) - v->width = i; + if (vent->width < len) + vent->width = len; } } diff --git a/bin/ps/ps.h b/bin/ps/ps.h index c5efb19fc00d..a1ec49cd676b 100644 --- a/bin/ps/ps.h +++ b/bin/ps/ps.h @@ -58,6 +58,7 @@ typedef struct varent { STAILQ_ENTRY(varent) next_ve; const char *header; struct var *var; + u_int width; } VARENT; STAILQ_HEAD(velisthead, varent); @@ -82,8 +83,6 @@ typedef struct var { size_t off; /* offset in structure */ enum type type; /* type of element */ const char *fmt; /* printf format */ - - short width; /* calculated width */ } VAR; #include "extern.h"