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 .
This commit is contained in:
martin 2021-04-06 18:09:52 +00:00
parent 3d2e7281ee
commit 891938fad8
1 changed files with 27 additions and 16 deletions

View File

@ -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, enum mode mode)
char buf[100];
v = ve->var;
if (!k->p_uvalid) {
/*
* Minimum width is less than header - we don't
* need to check it every time.
*/
if (mode == PRINTMODE)
(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);
if (mode == WIDTHMODE) {
/*
* 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 (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, "-");
} else {
(void)strftime(buf, sizeof(buf) -1, "%c",
localtime(&startt));
strprintorsetwidth(v, buf, mode);
}
}
}