On Thu, Nov 01, 2018 at 09:20:10PM +0000, Jason McIntyre wrote:
> while with the current behaviour it made sense to document it that way,
> once you change it, it just sounds odd. it should really be wrapped into
> the first sentence. sth like:
>
> Show only those processes owned by username or UID
> .Ar user .
Thanks, even better as this is shorter yet more precise in both places.
I'll commit it this way tomorrow unless someone objects.
Index: top.1
===================================================================
RCS file: /cvs/src/usr.bin/top/top.1,v
retrieving revision 1.69
diff -u -p -r1.69 top.1
--- top.1 25 Jul 2018 17:24:14 -0000 1.69
+++ top.1 1 Nov 2018 21:25:08 -0000
@@ -177,13 +177,11 @@ seconds.
The value may be fractional, to permit delays of less than 1 second.
The default delay between updates is 5 seconds.
.It Fl U Oo - Oc Ns Ar user
-Show only those processes owned by
+Show only those processes owned by username or UID
.Ar user .
The prefix
.Sq -
hides processes owned by that user.
-This option currently only accepts usernames and does not understand
-UID numbers.
.It Fl u
Do not take the time to map UID numbers to usernames.
Normally,
@@ -362,7 +360,7 @@ Set the delay between screen updates to
.Ar time
seconds.
.It u Oo - Oc Ns Ar user
-Show only those processes owned by
+Show only those processes owned by username or UID
.Ar user .
.Sq u+
shows processes belonging to all users.
Index: top.c
===================================================================
RCS file: /cvs/src/usr.bin/top/top.c,v
retrieving revision 1.95
diff -u -p -r1.95 top.c
--- top.c 1 Nov 2018 18:04:13 -0000 1.95
+++ top.c 1 Nov 2018 21:26:52 -0000
@@ -134,8 +134,10 @@ usage(void)
static int
filteruser(char buf[])
{
+ const char *errstr;
char *bufp = buf;
uid_t *uidp;
+ uid_t uid;
if (bufp[0] == '-') {
bufp++;
@@ -146,7 +148,16 @@ filteruser(char buf[])
ps.huid = (pid_t)-1;
}
- return uid_from_user(bufp, uidp);
+ if (uid_from_user(bufp, uidp) == 0)
+ return 0;
+
+ uid = strtonum(bufp, 0, UID_MAX, &errstr);
+ if (errstr == NULL && user_from_uid(uid, 1) != NULL) {
+ *uidp = uid;
+ return 0;
+ }
+
+ return -1;
}
static int