Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Oct 2003 14:54:05 +0200 (CEST)
From:      Jilles Tjoelker <jilles@stack.nl>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/57833: PATCH: ps cannot change title for keywords that are aliases
Message-ID:  <20031010125405.DC33C1CC71@turtle.stack.nl>
Resent-Message-ID: <200310101300.h9AD0beN059004@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         57833
>Category:       bin
>Synopsis:       PATCH: ps cannot change title for keywords that are aliases
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Oct 10 06:00:36 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Jilles Tjoelker
>Release:        FreeBSD 5.1-CURRENT i386
>Organization:
Eindhoven University of Technology
>Environment:
System: FreeBSD turtle.stack.nl 5.1-CURRENT FreeBSD 5.1-CURRENT #15: Thu Oct 9 11:43:55 CEST 2003 jilles@turtle.stack.nl:/usr/obj/usr/src/sys/TURTLE i386
(The world is a few days older than that.)

>Description:
Some keywords of the -o option of ps have aliases. Changing the header text
for aliases (by adding =text after the keyword) does not work.
An example is that stat is an alias for state.
>How-To-Repeat:
jilles@turtle /home/jilles$ ps -o stat=S -p $$
ps: stat: illegal keyword specification
STAT
Ss  
jilles@turtle /home/jilles$ ps -o state=S -p $$
   S
Ss  

(A useful special case is that setting all header texts to the empty string
removes the header line altogether.)

>Fix:

I have a patch.

This removes the possibility of aliases for multiple other keywords (e.g. an
alias virt for pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz,%cpu,%mem,command
could make ps -o virt do the same as ps -v).  These do not exist currently,
though, and don't seem very useful to me. If it is required, the old
parsefmt(v->alias, user); return NULL; code can be added instead of errx(1,
"%s: keyword not found (alias)", p);

The user argument to findvar() is no longer used.

--- keyword.c.patch begins here ---
--- /usr/src/bin/ps/keyword.c.orig	Wed Aug 13 20:37:33 2003
+++ /usr/src/bin/ps/keyword.c	Fri Oct 10 14:09:29 2003
@@ -296,6 +296,7 @@
 	VAR *v, key;
 	char *hp;
 
+	(void)user;
 	hp = strchr(p, '=');
 	if (hp)
 		*hp++ = '\0';
@@ -304,12 +305,11 @@
 	v = bsearch(&key, var, sizeof(var)/sizeof(VAR) - 1, sizeof(VAR), vcmp);
 
 	if (v && v->alias) {
-		if (hp) {
-			warnx("%s: illegal keyword specification", p);
-			eval = 1;
-		}
-		parsefmt(v->alias, user);
-		return ((VAR *)NULL);
+		key.name = v->alias;
+		v = bsearch(&key, var, sizeof(var)/sizeof(VAR) - 1,
+			sizeof(VAR), vcmp);
+		if (v == NULL)
+			errx(1, "%s: keyword not found (alias)", p);
 	}
 	if (!v) {
 		warnx("%s: keyword not found", p);
--- keyword.c.patch ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031010125405.DC33C1CC71>