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. */

Reply via email to