From nobody Mon Apr 28 12:23:22 2025 X-Original-To: dev-commits-src-main@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 4ZmMzt71Jmz5vJLj; Mon, 28 Apr 2025 12:23:22 +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 4ZmMzt1PC5z3frZ; Mon, 28 Apr 2025 12:23:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745843002; 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=gGC9pjEEDbdciohxs/N9hX/HvC/E3O/Nxa2qePiLPlY=; b=clfg9G/T5KyN62+JvZB3i5nPzkPiC2hLRIdRcqM1Dm670oxluTyfAnNsaGoCM/p7nXjl76 VztyEBFrjPNC/CBvYBm38gxsMW3mbeXoN0f56M3P7/jJhc7xakbknZtY3ObYQVgvQIW5eB blydibA8LiHhl1gkTNs1HBXGgotgsiP84MnaSdwh5LECgyh5hdVDAi3neieuHgyLO1Sprm tnhHEYiQfV6fZd7cz1eMIlcVuUXIbiqU/S9GpZ4izze5+7GCvONyIdy1rOPHilaJ9hTmtk 43H+qyM0x608fdtrC/Ie6zcsEgQorBm0P/rnduofaxx/rR/7H9kWOsOqMtgUAg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745843002; a=rsa-sha256; cv=none; b=CHu9JfTDf/WC1m0wKLXAN/qbZ96KvMJ45XTYTrgsc9sdwEaSizoXUWMVirxVQP6lWIsgUd 3aKtJ5/WjKJh5N41Wkqi64S4y/vdSj8jLd4HKl4AqmsWeDm9afFD5dRX97orVFn0oAjL0C HiSXz9JkeGI7Yga2mz64xXEk0AQfhm5EWaz8gT/2cuNi5qdKd1IXOoK6Wgpou2wvQ1s4gf WSnBd86ThnQGFANXb6GSPg3mgBXiXalxzazNZ3+CATAjpa+WcDogACrIyxholS+fjCQyIL HlFR5xGwBYdEKoNoTTsdbE5ILi7nGXRjCtGfZjPd3uD13QEqbE8Y7v3HZ8dLhg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745843002; 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=gGC9pjEEDbdciohxs/N9hX/HvC/E3O/Nxa2qePiLPlY=; b=loH8X6B6HxaSQVmCug4YqcCdpxiEotTa46zuQ1YHSXJLYjpHE6jFhf9vAVNB+jHAIjfKVn 0pfC3kInsULqUHhAt4SFLpFbOUi6A5VDaVH4/YQWsbWNtcufNs3EGypu8ETgLa1Xmn8R0r 7/k24ENqJpihUkFbU9TcmEjJVYNzAKuY8hRNPuLw7LuBqujJGt/BjDyd1zOcAe5nqorgG+ No1k4dOSg/NaLTl7c4i7nHDJKLxH6vDwHD+22LW+pSfzuPs43BOQWmZAfE6l0M6UxQ6I9V teApSd5ljMOUAeBu2oadiN9XI6HCzJPfkBPz7vJeWNjRCYU24fwEgFvI+GnGhQ== 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 4ZmMzt0yp3zbW0; Mon, 28 Apr 2025 12:23:22 +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 53SCNMRh025192; Mon, 28 Apr 2025 12:23:22 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53SCNMWe025188; Mon, 28 Apr 2025 12:23:22 GMT (envelope-from git) Date: Mon, 28 Apr 2025 12:23:22 GMT Message-Id: <202504281223.53SCNMWe025188@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 07a7557addc0 - main - ps(1): Have parsefmt() take the list of columns to update List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 07a7557addc03acd28aaae55b90419c4ef9d9ad1 Auto-Submitted: auto-generated The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=07a7557addc03acd28aaae55b90419c4ef9d9ad1 commit 07a7557addc03acd28aaae55b90419c4ef9d9ad1 Author: Olivier Certner AuthorDate: 2025-02-27 17:15:14 +0000 Commit: Olivier Certner CommitDate: 2025-04-28 11:56:20 +0000 ps(1): Have parsefmt() take the list of columns to update This is in preparation for changing the behavior of the '-O' option. While here, reformat the definition of 'struct varent', fix formatting of that of 'struct var' and expand slightly their herald comments. More reformatting/commenting in 'ps.h'. No functional change intended. Reviewed by: kib MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49607 --- bin/ps/extern.h | 4 ++-- bin/ps/keyword.c | 17 +++++++++-------- bin/ps/ps.c | 20 ++++++++++---------- bin/ps/ps.h | 12 +++++++----- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/bin/ps/extern.h b/bin/ps/extern.h index 9d4630adfdd6..48c452aeb844 100644 --- a/bin/ps/extern.h +++ b/bin/ps/extern.h @@ -39,7 +39,7 @@ extern int cflag, eval, fscale, nlistread, rawcpu; extern unsigned long mempages; extern time_t now; extern int showthreads, sumrusage, termwidth; -extern STAILQ_HEAD(velisthead, varent) varlist; +extern struct velisthead varlist; __BEGIN_DECLS char *arguments(KINFO *, VARENT *); @@ -65,7 +65,7 @@ char *lockname(KINFO *, VARENT *); char *mwchan(KINFO *, VARENT *); char *nwchan(KINFO *, VARENT *); char *pagein(KINFO *, VARENT *); -void parsefmt(const char *, int); +void parsefmt(const char *, struct velisthead *, int); char *pcpu(KINFO *, VARENT *); char *pmem(KINFO *, VARENT *); char *pri(KINFO *, VARENT *); diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 0c8edb06b562..72fe9e183aac 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -44,7 +44,7 @@ #include "ps.h" -static VAR *findvar(char *, int, char **header); +static VAR *findvar(char *, struct velisthead *, int, char **header); static int vcmp(const void *, const void *); /* Compute offset in common structures. */ @@ -254,7 +254,8 @@ showkey(void) } void -parsefmt(const char *p, int user) +parsefmt(const char *p, struct velisthead *const var_list, + const int user) { char *tempstr, *tempstr1; @@ -278,7 +279,7 @@ parsefmt(const char *p, int user) cp = tempstr; tempstr = NULL; } - if (cp == NULL || !(v = findvar(cp, user, &hp))) + if (cp == NULL || !(v = findvar(cp, var_list, user, &hp))) continue; if (!user) { /* @@ -302,10 +303,10 @@ parsefmt(const char *p, int user) if (vent->var == NULL) xo_errx(1, "malloc failed"); memcpy(vent->var, v, sizeof(*vent->var)); - STAILQ_INSERT_TAIL(&varlist, vent, next_ve); + STAILQ_INSERT_TAIL(var_list, vent, next_ve); } free(tempstr1); - if (STAILQ_EMPTY(&varlist)) { + if (STAILQ_EMPTY(var_list)) { xo_warnx("no valid keywords; valid keywords:"); showkey(); exit(1); @@ -313,7 +314,7 @@ parsefmt(const char *p, int user) } static VAR * -findvar(char *p, int user, char **header) +findvar(char *p, struct velisthead *const var_list, int user, char **header) { size_t rflen; VAR *v, key; @@ -334,7 +335,7 @@ findvar(char *p, int user, char **header) * process the alias. */ if (hp == NULL) - parsefmt(v->alias, user); + parsefmt(v->alias, var_list, user); else { /* * XXX - This processing will not be correct for @@ -347,7 +348,7 @@ findvar(char *p, int user, char **header) if (realfmt == NULL) xo_errx(1, "malloc failed"); snprintf(realfmt, rflen, "%s=%s", v->alias, hp); - parsefmt(realfmt, user); + parsefmt(realfmt, var_list, user); free(realfmt); } return ((VAR *)NULL); diff --git a/bin/ps/ps.c b/bin/ps/ps.c index 15d4d70eebf5..a5ae43b7fad1 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -293,7 +293,7 @@ main(int argc, char *argv[]) nselectors++; break; case 'j': - parsefmt(jfmt, 0); + parsefmt(jfmt, &varlist, 0); _fmt = 1; jfmt[0] = '\0'; break; @@ -301,7 +301,7 @@ main(int argc, char *argv[]) showkey(); exit(0); case 'l': - parsefmt(lfmt, 0); + parsefmt(lfmt, &varlist, 0); _fmt = 1; lfmt[0] = '\0'; break; @@ -315,14 +315,14 @@ main(int argc, char *argv[]) nlistf = optarg; break; case 'O': - parsefmt(o1, 1); - parsefmt(optarg, 1); - parsefmt(o2, 1); + parsefmt(o1, &varlist, 1); + parsefmt(optarg, &varlist, 1); + parsefmt(o2, &varlist, 1); o1[0] = o2[0] = '\0'; _fmt = 1; break; case 'o': - parsefmt(optarg, 1); + parsefmt(optarg, &varlist, 1); _fmt = 1; break; case 'p': @@ -384,13 +384,13 @@ main(int argc, char *argv[]) nselectors++; break; case 'u': - parsefmt(ufmt, 0); + parsefmt(ufmt, &varlist, 0); sortby = SORTCPU; _fmt = 1; ufmt[0] = '\0'; break; case 'v': - parsefmt(vfmt, 0); + parsefmt(vfmt, &varlist, 0); sortby = SORTMEM; _fmt = 1; vfmt[0] = '\0'; @@ -420,7 +420,7 @@ main(int argc, char *argv[]) xkeep = 1; break; case 'Z': - parsefmt(Zfmt, 0); + parsefmt(Zfmt, &varlist, 0); Zfmt[0] = '\0'; break; case '?': @@ -454,7 +454,7 @@ main(int argc, char *argv[]) xo_errx(1, "%s", errbuf); if (!_fmt) - parsefmt(dfmt, 0); + parsefmt(dfmt, &varlist, 0); if (!all && nselectors == 0) { uidlist.l.ptr = malloc(sizeof(uid_t)); diff --git a/bin/ps/ps.h b/bin/ps/ps.h index 521027427036..c5efb19fc00d 100644 --- a/bin/ps/ps.h +++ b/bin/ps/ps.h @@ -53,13 +53,15 @@ typedef struct kinfo { STAILQ_HEAD(, kinfo_str) ki_ks; } KINFO; -/* Variables. */ +/* Keywords/variables to be printed. */ typedef struct varent { - STAILQ_ENTRY(varent) next_ve; - const char *header; - struct var *var; + STAILQ_ENTRY(varent) next_ve; + const char *header; + struct var *var; } VARENT; +STAILQ_HEAD(velisthead, varent); +/* Structure representing one available keyword. */ typedef struct var { const char *name; /* name(s) of variable */ const char *header; /* default header */ @@ -71,7 +73,7 @@ typedef struct var { #define INF127 0x10 /* values >127 displayed as 127 */ u_int flag; /* output routine */ - char *(*oproc)(struct kinfo *, struct varent *); + char *(*oproc)(struct kinfo *, struct varent *); /* * The following (optional) elements are hooks for passing information * to the generic output routine pvar (which prints simple elements