Module Name: src
Committed By: martin
Date: Tue Apr 6 18:09:52 UTC 2021
Modified Files:
src/bin/ps [netbsd-8]: print.c
Log Message:
Pull up following revision(s) (requested by simonb in ticket #1669):
bin/ps/print.c: revision 1.133
Fix the column width calculation for the lstart column if an empty
column header is specified.
Fixes bug pointed out by Ted Spradley in
https://mail-index.netbsd.org/netbsd-users/2021/04/05/msg026808.html .
To generate a diff of this commit:
cvs rdiff -u -r1.127 -r1.127.6.1 src/bin/ps/print.c
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/print.c
diff -u src/bin/ps/print.c:1.127 src/bin/ps/print.c:1.127.6.1
--- src/bin/ps/print.c:1.127 Mon Dec 12 20:35:36 2016
+++ src/bin/ps/print.c Tue Apr 6 18:09:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: print.c,v 1.127 2016/12/12 20:35:36 christos Exp $ */
+/* $NetBSD: print.c,v 1.127.6.1 2021/04/06 18:09:52 martin 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.127 2016/12/12 20:35:36 christos Exp $");
+__RCSID("$NetBSD: print.c,v 1.127.6.1 2021/04/06 18:09:52 martin Exp $");
#endif
#endif /* not lint */
@@ -810,22 +810,33 @@ lstarted(struct pinfo *pi, VARENT *ve, e
char buf[100];
v = ve->var;
- if (!k->p_uvalid) {
+ startt = k->p_ustart_sec;
+
+ if (mode == WIDTHMODE) {
/*
- * Minimum width is less than header - we don't
- * need to check it every time.
+ * We only need to set the width once, as we assume
+ * that all times are the same length. We do need to
+ * check against the header length as well, as "no
+ * header" mode for this variable will set the field
+ * width to the length of the header anyway (ref: the
+ * P1003.1-2004 comment in findvar()).
+ *
+ * XXX: The hardcoded "STARTED" string. Better or
+ * worse than a "<= 7" or some other arbitary number?
*/
- if (mode == PRINTMODE)
+ if (v->width <= (int)strlen("STARTED")) {
+ (void)strftime(buf, sizeof(buf) -1, "%c",
+ localtime(&startt));
+ strprintorsetwidth(v, buf, mode);
+ }
+ } else {
+ if (!k->p_uvalid) {
(void)printf("%*s", v->width, "-");
- return;
- }
- startt = k->p_ustart_sec;
-
- /* assume all times are the same length */
- if (mode != WIDTHMODE || v->width == 0) {
- (void)strftime(buf, sizeof(buf) -1, "%c",
- localtime(&startt));
- strprintorsetwidth(v, buf, mode);
+ } else {
+ (void)strftime(buf, sizeof(buf) -1, "%c",
+ localtime(&startt));
+ strprintorsetwidth(v, buf, mode);
+ }
}
}