Module Name: src Committed By: christos Date: Tue Sep 14 22:01:17 UTC 2021
Modified Files: src/bin/ps: keyword.c print.c ps.c ps.h Log Message: use emalloc and friends, add ktrace flag printing. To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 src/bin/ps/keyword.c cvs rdiff -u -r1.136 -r1.137 src/bin/ps/print.c cvs rdiff -u -r1.96 -r1.97 src/bin/ps/ps.c cvs rdiff -u -r1.31 -r1.32 src/bin/ps/ps.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/bin/ps/keyword.c diff -u src/bin/ps/keyword.c:1.58 src/bin/ps/keyword.c:1.59 --- src/bin/ps/keyword.c:1.58 Tue Sep 14 13:09:18 2021 +++ src/bin/ps/keyword.c Tue Sep 14 18:01:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: keyword.c,v 1.58 2021/09/14 17:09:18 christos Exp $ */ +/* $NetBSD: keyword.c,v 1.59 2021/09/14 22:01:17 christos Exp $ */ /*- * Copyright (c) 1990, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)keyword.c 8.5 (Berkeley) 4/2/94"; #else -__RCSID("$NetBSD: keyword.c,v 1.58 2021/09/14 17:09:18 christos Exp $"); +__RCSID("$NetBSD: keyword.c,v 1.59 2021/09/14 22:01:17 christos Exp $"); #endif #endif /* not lint */ @@ -55,6 +55,7 @@ __RCSID("$NetBSD: keyword.c,v 1.58 2021/ #include <stdlib.h> #include <string.h> #include <signal.h> +#include <util.h> #include "ps.h" @@ -136,7 +137,7 @@ VAR var[] = { PUVAR("isrss", "ISRSS", 0, p_uru_isrss, UINT64, PRId64), PUVAR("ixrss", "IXRSS", 0, p_uru_ixrss, UINT64, PRId64), PVAR("jobc", "JOBC", 0, p_jobc, SHORT, "d"), - PVAR("ktrace", "KTRACE", 0, p_traceflag, INT, "x"), + PVAR("ktrace", "KTRACE", 0, p_traceflag, KTRACEFLAG, "x"), /*XXX*/ PVAR("ktracep", "KTRACEP", 0, p_tracep, KPTR, PRIx64), LVAR("laddr", "LADDR", 0, l_laddr, KPTR, PRIx64), LVAR("lid", "LID", 0, l_lid, INT32, "d"), @@ -257,7 +258,7 @@ parsevarlist(const char *pp, struct varl char *p, *sp, *equalsp; /* dup to avoid zapping arguments. We will free sp later. */ - p = sp = strdup(pp); + p = sp = estrdup(pp); /* * Everything after the first '=' is part of a custom header. @@ -305,8 +306,7 @@ parsevarlist(const char *pp, struct varl */ if ((v = findvar(cp)) == NULL) continue; - if ((vent = malloc(sizeof(struct varent))) == NULL) - err(EXIT_FAILURE, NULL); + vent = emalloc(sizeof(*vent)); vent->var = v; if (pos && *pos) SIMPLEQ_INSERT_AFTER(listptr, *pos, vent, next); @@ -369,7 +369,7 @@ findvar(const char *p) for (char *dp = pp; *dp; dp++) *dp = tolower((unsigned char)*dp); - v = bsearch(pp, var, sizeof(var)/sizeof(VAR) - 1, sizeof(VAR), vcmp); + v = bsearch(pp, var, __arraycount(var) - 1, sizeof(*var), vcmp); if (v && v->flag & ALIAS) v = findvar(v->header); if (!v) { @@ -381,11 +381,8 @@ findvar(const char *p) if (!hp && *p == *pp) return v; - struct var *newvar; - - if ((newvar = malloc(sizeof(*newvar))) == NULL) - err(EXIT_FAILURE, NULL); - memcpy(newvar, v, sizeof(*newvar)); + struct var *newvar = emalloc(sizeof(*newvar)); + *newvar = *v; v = newvar; if (hp) { @@ -397,10 +394,7 @@ findvar(const char *p) * used multiple times with different headers. We also * need to strdup the header. */ - char *newheader; - if ((newheader = strdup(hp)) == NULL) - err(EXIT_FAILURE, NULL); - newvar->header = newheader; + newvar->header = estrdup(hp); /* * According to P1003.1-2004, if the header text is null, * such as -o user=, the field width will be at least as Index: src/bin/ps/print.c diff -u src/bin/ps/print.c:1.136 src/bin/ps/print.c:1.137 --- src/bin/ps/print.c:1.136 Tue Sep 14 13:09:18 2021 +++ src/bin/ps/print.c Tue Sep 14 18:01:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: print.c,v 1.136 2021/09/14 17:09:18 christos Exp $ */ +/* $NetBSD: print.c,v 1.137 2021/09/14 22:01:17 christos Exp $ */ /* * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ #if 0 static char sccsid[] = "@(#)print.c 8.6 (Berkeley) 4/16/94"; #else -__RCSID("$NetBSD: print.c,v 1.136 2021/09/14 17:09:18 christos Exp $"); +__RCSID("$NetBSD: print.c,v 1.137 2021/09/14 22:01:17 christos Exp $"); #endif #endif /* not lint */ @@ -77,6 +77,7 @@ __RCSID("$NetBSD: print.c,v 1.136 2021/0 #include <sys/ucred.h> #include <sys/sysctl.h> #include <sys/acct.h> +#include <sys/ktrace.h> #include <err.h> #include <grp.h> @@ -1170,9 +1171,7 @@ printsig(VAR *v, const sigset_t *s, enum strprintorsetwidth(v, buf + i, mode); } else { size_t maxlen = 1024, len = 0; - char *buf = malloc(maxlen); - if (buf == NULL) - err(EXIT_FAILURE, NULL); + char *buf = emalloc(maxlen); *buf = '\0'; for (size_t i = 0; i < SIGSETSIZE; i++) { uint32_t m = s->__bits[i]; @@ -1185,9 +1184,7 @@ printsig(VAR *v, const sigset_t *s, enum sn++; if (len + sn >= maxlen) { maxlen += 1024; - buf = realloc(buf, maxlen); - if (buf == NULL) - err(EXIT_FAILURE, NULL); + buf = erealloc(buf, maxlen); } snprintf(buf + len, sn + 1, "%s%s", len == 0 ? "" : ",", n); @@ -1204,15 +1201,23 @@ static void printflag(VAR *v, int flag, enum mode mode) { char buf[1024]; - snprintb(buf, sizeof(buf), __SYSCTL_PROC_FLAG_BITS, flag); - strprintorsetwidth(v, buf, mode); -} + const char *fmt; -static void -printacflag(VAR *v, int flag, enum mode mode) -{ - char buf[1024]; - snprintb(buf, sizeof(buf), __ACCT_FLAG_BITS, flag); + switch (v->type) { + case PROCFLAG: + fmt = __SYSCTL_PROC_FLAG_BITS; + break; + case KTRACEFLAG: + fmt = __KTRACE_FLAG_BITS; + break; + case PROCACFLAG: + fmt = __ACCT_FLAG_BITS; + break; + default: + err(EXIT_FAILURE, "Bad type %d", v->type); + } + + snprintb(buf, sizeof(buf), fmt, (unsigned)flag); strprintorsetwidth(v, buf, mode); } @@ -1271,6 +1276,7 @@ printval(void *bp, VAR *v, enum mode mod val = GET(int32_t); vok = VSIGN; break; + case KTRACEFLAG: case PROCFLAG: if (v->flag & ALTPR) break; @@ -1367,13 +1373,14 @@ printval(void *bp, VAR *v, enum mode mod return; case PROCACFLAG: if (v->flag & ALTPR) { - printacflag(v, CHK_INF127(GET(u_short)), mode); + printflag(v, CHK_INF127(GET(u_short)), mode); return; } /*FALLTHROUGH*/ case USHORT: (void)printf(ofmt, width, CHK_INF127(GET(u_short))); return; + case KTRACEFLAG: case PROCFLAG: if (v->flag & ALTPR) { printflag(v, GET(int), mode); Index: src/bin/ps/ps.c diff -u src/bin/ps/ps.c:1.96 src/bin/ps/ps.c:1.97 --- src/bin/ps/ps.c:1.96 Fri Jun 4 18:39:41 2021 +++ src/bin/ps/ps.c Tue Sep 14 18:01:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ps.c,v 1.96 2021/06/04 22:39:41 christos Exp $ */ +/* $NetBSD: ps.c,v 1.97 2021/09/14 22:01:17 christos Exp $ */ /* * Copyright (c) 2000-2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ __COPYRIGHT("@(#) Copyright (c) 1990, 19 #if 0 static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94"; #else -__RCSID("$NetBSD: ps.c,v 1.96 2021/06/04 22:39:41 christos Exp $"); +__RCSID("$NetBSD: ps.c,v 1.97 2021/09/14 22:01:17 christos Exp $"); #endif #endif /* not lint */ @@ -98,6 +98,7 @@ __RCSID("$NetBSD: ps.c,v 1.96 2021/06/04 #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <util.h> #include "ps.h" @@ -449,7 +450,7 @@ main(int argc, char *argv[]) /* * sort proc list */ - qsort(pinfo, nentries, sizeof(struct pinfo), pscomp); + qsort(pinfo, nentries, sizeof(*pinfo), pscomp); /* * We want things in descendant order @@ -472,7 +473,7 @@ main(int argc, char *argv[]) continue; kl = kvm_getlwps(kd, ki->p_pid, ki->p_paddr, - sizeof(struct kinfo_lwp), &nlwps); + sizeof(*kl), &nlwps); if (kl == 0) nlwps = 0; if (showlwps == 0) { @@ -507,7 +508,7 @@ main(int argc, char *argv[]) (ki->p_flag & P_CONTROLT ) == 0)) continue; kl = kvm_getlwps(kd, ki->p_pid, (u_long)ki->p_paddr, - sizeof(struct kinfo_lwp), &nlwps); + sizeof(*kl), &nlwps); if (kl == 0) nlwps = 0; if (showlwps == 0) { @@ -609,8 +610,8 @@ static struct kinfo_proc2 * getkinfo_kvm(kvm_t *kdp, int what, int flag, int *nentriesp) { - return (kvm_getproc2(kdp, what, flag, sizeof(struct kinfo_proc2), - nentriesp)); + return kvm_getproc2(kdp, what, flag, sizeof(struct kinfo_proc2), + nentriesp); } static struct pinfo * @@ -619,10 +620,7 @@ setpinfo(struct kinfo_proc2 *ki, int nen struct pinfo *pi; int i; - pi = calloc(nentries, sizeof(*pi)); - if (pi == NULL) - err(EXIT_FAILURE, "calloc"); - + pi = ecalloc(nentries, sizeof(*pi)); if (calc_pcpu && !nlistread) donlist(); @@ -781,8 +779,7 @@ kludge_oldps_options(char *s) char *newopts, *ns, *cp; len = strlen(s); - if ((newopts = ns = malloc(len + 3)) == NULL) - err(EXIT_FAILURE, NULL); + newopts = ns = emalloc(len + 3); /* * options begin with '-' */ @@ -890,7 +887,7 @@ descendant_sort(struct pinfo *ki, int it if (src < dst) { kn = ki[src]; memmove(ki + src, ki + src + 1, - (dst - src + ndst - 1) * sizeof *ki); + (dst - src + ndst - 1) * sizeof(*ki)); ki[dst + ndst - 1] = kn; nsrc--; dst--; @@ -898,7 +895,7 @@ descendant_sort(struct pinfo *ki, int it } else if (src != dst + ndst) { kn = ki[src]; memmove(ki + dst + ndst + 1, ki + dst + ndst, - (src - dst - ndst) * sizeof *ki); + (src - dst - ndst) * sizeof(*ki)); ki[dst + ndst] = kn; ndst++; nsrc--; @@ -915,15 +912,13 @@ descendant_sort(struct pinfo *ki, int it * Now populate prefix (instead of level) with the command * prefix used to show descendancies. */ - path = malloc((maxlvl + 7) / 8); - memset(path, '\0', (maxlvl + 7) / 8); + path = ecalloc((maxlvl + 7) / 8, 1); for (src = 0; src < items; src++) { if ((lvl = ki[src].level) == 0) { ki[src].prefix = NULL; continue; } - if ((ki[src].prefix = malloc(lvl * 2 + 1)) == NULL) - errx(EXIT_FAILURE, "malloc failed"); + ki[src].prefix = emalloc(lvl * 2 + 1); for (n = 0; n < lvl - 2; n++) { ki[src].prefix[n * 2] = path[n / 8] & 1 << (n % 8) ? '|' : ' '; Index: src/bin/ps/ps.h diff -u src/bin/ps/ps.h:1.31 src/bin/ps/ps.h:1.32 --- src/bin/ps/ps.h:1.31 Tue Sep 14 13:09:18 2021 +++ src/bin/ps/ps.h Tue Sep 14 18:01:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ps.h,v 1.31 2021/09/14 17:09:18 christos Exp $ */ +/* $NetBSD: ps.h,v 1.32 2021/09/14 22:01:17 christos Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -44,7 +44,8 @@ enum type { UNSPECIFIED, CHAR, UCHAR, SHORT, USHORT, INT, UINT, LONG, ULONG, KPTR, KPTR24, INT32, UINT32, SIGLIST, INT64, UINT64, - TIMEVAL, CPUTIME, PCPU, VSIZE, PROCFLAG, PROCACFLAG + TIMEVAL, CPUTIME, PCPU, VSIZE, PROCFLAG, PROCACFLAG, + KTRACEFLAG }; /* Variables. */