From nobody Thu May 1 19:51:32 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZpPnd2zLRz5vf2y; Thu, 01 May 2025 19:51:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZpPnd02d5z46b1; Thu, 01 May 2025 19:51:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746129093; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tRfy0H7bz1JZTQLPDyomX0n7S7u3vFkU2KfmBOmFh94=; b=vbtDcwJs7nMPq+05cdcxQ6/pP+0cqqxj0rEo7cImXhL2+OiUISiiIrccLcvLLi839juOrT kFY7PPhwzPBFNdA39NXgL1AFy6jeSfHQ9HA5WpN8uMUW2drD/cjMUZeWHYO+detbwvfMRr jPvxFJ7HMtQpOV6MtIMKP/Vi0UHQn0du8AvNLSqbxVC9rf3orZ1vnC2E/l7FHoY9uoEmMb vTMK2CprAvZ2VI2ftOU/lPTVawjfy02wgU1RU2ScBmrYDM84NZDK8LglA5QhLlv/hTQgF0 2rw6M2RrjTrMqvZjRwsJjnf6786wDZa/6F+CXyE7WQ9Na/qIatbIs52K92yIvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746129093; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tRfy0H7bz1JZTQLPDyomX0n7S7u3vFkU2KfmBOmFh94=; b=TrIdYha04r+uyVTo7YjbdNQEKbzL5jAH8pWC2wesUYB0xdQ6yrtIKtYDHwGD3LRQggHw35 92B52b4YyFJrIMVNKVMSN6CbFB/vcjLjYlkykB51DFPe6xp6opvSj08C1ONEtO6lM96lbG nlzCK6ZblwUPLOs78qtsq/iWueZjp+m7k13K22iiutf6pmpJDLOFDvQ9hbd3fQihMLB+rO /KgnTOnBLR43CqEIaSKgS5LX5XVXzCkFlBM0HJTaIecjyRrTdmLONwP5q7OnnNmXBGVB9G HIZR5mKH044HuNQ6hRBXySpquFBpXhkQSET5YMNPlQDGxXZzOgQZ2KQI3bt1UA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746129093; a=rsa-sha256; cv=none; b=WQe7Sqn0hoDY2y5u62/HJuY8zgm4AASF2ahnHYmXj+BzbkbdEPM1SIir8Qg7ixg4dEVWLB DQLECYYO3ofbC05PG9UdJvgM/QAZ51LGWTWudJU30KohyWpE6v/OegR24yusoqA0vMgCtz ctpkCvcQtDsJh0STxqXO5nfZV3qJqsKQcBnk+q90boVYq+106jrI2Bw3HGC14obnSWlQ1n kwdK62atLy3aFdP4I57ZN3uapR7LRdlP0b91TfBcassexG0xOTQ3pdX4dqmYmIzAgcJsEu q1+Bc19DmdQmGvRXIhjCNHQs3E6EiXhPcRMPWXxCUH8e36b1C0BWhrmdz8qT6A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZpPnc643lzj18; Thu, 01 May 2025 19:51:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 541JpWKI067313; Thu, 1 May 2025 19:51:32 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 541JpWEO067310; Thu, 1 May 2025 19:51:32 GMT (envelope-from git) Date: Thu, 1 May 2025 19:51:32 GMT Message-Id: <202505011951.541JpWEO067310@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Olivier Certner Subject: git: b1722013af95 - stable/14 - ps(1): Move 'width' field from VAR to VARENT; Remove sizevars() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: b1722013af9508b78619dc8aab2324daef22fed6 Auto-Submitted: auto-generated The branch stable/14 has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=b1722013af9508b78619dc8aab2324daef22fed6 commit b1722013af9508b78619dc8aab2324daef22fed6 Author: Olivier Certner AuthorDate: 2025-02-28 18:30:54 +0000 Commit: Olivier Certner CommitDate: 2025-05-01 19:37:03 +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 (cherry picked from commit 490f251bf90dbfda8043e2d1f4a71dd3a91a8628) --- 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 21330ed9e2ac..823018f12ba5 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -64,188 +64,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"; @@ -305,6 +304,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"); @@ -331,7 +331,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 1ed6afe995c5..d7d3fd1339dc 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -88,9 +88,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 14dea797a7f7..44e6ecd32498 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -152,7 +152,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); @@ -660,8 +659,6 @@ main(int argc, char *argv[]) } } - sizevars(); - if (nkept == 0) { printheader(); if (xo_finish() < 0) @@ -720,7 +717,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) ? "-" : "", @@ -1238,7 +1235,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) { @@ -1253,23 +1250,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 d21bf016bcca..838aea33f3aa 100644 --- a/bin/ps/ps.h +++ b/bin/ps/ps.h @@ -60,6 +60,7 @@ typedef struct varent { STAILQ_ENTRY(varent) next_ve; const char *header; struct var *var; + u_int width; } VARENT; STAILQ_HEAD(velisthead, varent); @@ -84,8 +85,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"