git: 07a7557addc0 - main - ps(1): Have parsefmt() take the list of columns to update
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 28 Apr 2025 12:23:22 UTC
The branch main has been updated by olce:
URL: https://cgit.FreeBSD.org/src/commit/?id=07a7557addc03acd28aaae55b90419c4ef9d9ad1
commit 07a7557addc03acd28aaae55b90419c4ef9d9ad1
Author: Olivier Certner <olce@FreeBSD.org>
AuthorDate: 2025-02-27 17:15:14 +0000
Commit: Olivier Certner <olce@FreeBSD.org>
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