Date: Wed, 5 Nov 1997 10:20:03 -0800 (PST) From: Martin Kammerhofer <dada@sbox.tu-graz.ac.at> To: freebsd-bugs Subject: Re: bin/4947: ps(1) output is not parsable and -Ortprio doesn't work Message-ID: <199711051820.KAA26613@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/4947; it has been noted by GNATS. From: Martin Kammerhofer <dada@sbox.tu-graz.ac.at> To: FreeBSD problems <FreeBSD-gnats-submit@freebsd.org> Cc: Subject: Re: bin/4947: ps(1) output is not parsable and -Ortprio doesn't work Date: Wed, 5 Nov 1997 19:15:10 +0100 (CET) On Wed, 5 Nov 1997, Bill Fenner wrote: > >+ default: > >+ strncpy(str, "?", 2); > > I'd do something like "%d:%d", prtp->type, prio (taking care, of course, > not to overflow) -- someone someday is going to be *really* frustrated that > ps just prints a "?". > You're right. Although currently 0 <= type <= 2 and 0 <= prio <= 31 holds, it isn't guaranteed to be that way for all times. How about this (relative to the last patch)? Index: print.c =================================================================== RCS file: /home/dada/cvsroot/bin/ps/print.c,v retrieving revision 1.3 diff -u -K -r1.3 print.c --- print.c 1997/11/05 08:59:33 1.3 +++ print.c 1997/11/05 18:05:12 @@ -666,27 +666,26 @@ VAR *v; struct rtprio *prtp; char str[8]; - unsigned prio; + unsigned type, prio; v = ve->var; prtp = (struct rtprio *) ((char *)KI_PROC(k) + v->off); prio = prtp->prio; - if (prio > 99) - prio = 99; /* ensure that 'str' can *never* overflow */ - switch (prtp->type) { + switch (type = prtp->type) { case RTP_PRIO_REALTIME: - sprintf(str, "real:%u", prio); + snprintf(str, sizeof(str), "real:%u", prio); break; case RTP_PRIO_NORMAL: - strncpy(str, "normal", 7); + strncpy(str, "normal", sizeof(str)); break; case RTP_PRIO_IDLE: - sprintf(str, "idle:%u", prio); + snprintf(str, sizeof(str), "idle:%u", prio); break; default: - strncpy(str, "?", 2); + snprintf(str, sizeof(str), "%u:%u", type, prio); break; } + str[sizeof(str)-1] = '\0'; (void)printf("%*s", v->width, str); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711051820.KAA26613>