Date: Sat, 20 Apr 2002 13:00:07 -0700 (PDT) From: Peter Avalos <pavalos@theshell.com> To: freebsd-standards@FreeBSD.org Subject: Re: standards/36950: Add -n to renice(8) Message-ID: <200204202000.g3KK07V50494@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR standards/36950; it has been noted by GNATS.
From: Peter Avalos <pavalos@theshell.com>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-standards@FreeBSD.org
Cc:
Subject: Re: standards/36950: Add -n to renice(8)
Date: Sat, 20 Apr 2002 12:51:00 -0700
I think things can be done better than what was changed in the Apr. 10
commit, so I re-did the patch against the newest version.
Summary of changes:
- Use FBSDID.
- Use sysexits.
- Change incr to nflag since I think this is better style (originally
mike's idea).
- Change the usage closer to style(9). Along with this, use nice value
since it's less confusing than priority. If I want to raise the
priority, I need to lower the nice value.
- Move more towards POSIX by only accepting 1 option, and then using
that option to determine how the ID is interpreted.
- Allow the user to specify usernames and userids.
- Remove the prio bounds check. setpriority() does this for us.
- Remove the printf that tells the user the old priority and new
priority. POSIX says stdout is not used, and the value of this message
is questionable.
- All numbers should be decimal integers.
Index: renice.c
===================================================================
RCS file: /cvsroot/fbsd/src/usr.bin/renice/renice.c,v
retrieving revision 1.11
diff -u -r1.11 renice.c
--- renice.c 10 Apr 2002 13:38:09 -0000 1.11
+++ renice.c 20 Apr 2002 19:23:42 -0000
@@ -35,16 +35,15 @@
static const char copyright[] =
"@(#) Copyright (c) 1983, 1989, 1993\n\
The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-#ifndef lint
#if 0
static char sccsid[] = "@(#)renice.c 8.1 (Berkeley) 6/9/93";
#endif
-static const char rcsid[] =
- "$FreeBSD: src/usr.bin/renice/renice.c,v 1.11 2002/04/10 13:38:09 maxim Exp $";
#endif /* not lint */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
@@ -56,6 +55,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sysexits.h>
static int donice(int, int, int, int);
static int getnum(const char *, const char *, int *);
@@ -70,38 +70,48 @@
main(int argc, char *argv[])
{
struct passwd *pwd;
- int errs, incr, prio, which, who;
+ char *ep;
+ int errs, nflag, prio, which, who;
errs = 0;
- incr = 0;
+ nflag = 0;
which = PRIO_PROCESS;
who = 0;
argc--, argv++;
if (argc < 2)
usage();
if (strcmp(*argv, "-n") == 0) {
- incr = 1;
+ nflag = 1;
argc--, argv++;
if (argc < 2)
usage();
}
- if (getnum("priority", *argv, &prio))
- return (1);
+ if (getnum("nice_value", *argv, &prio))
+ exit(EX_DATAERR);
argc--, argv++;
+
+ /*
+ * The next argument shall be -g, -p, -u, or an unsigned decimal
+ * number. If it is a number, default to -p (PRIO_PROCESS).
+ */
+ if (strcmp(*argv, "-g") == 0) {
+ which = PRIO_PGRP;
+ argc--, argv++;
+ } else if (strcmp(*argv, "-u") == 0) {
+ which = PRIO_USER;
+ argc--, argv++;
+ } else if (strcmp(*argv, "-p") == 0)
+ argc--, argv++;
+ if (argc < 1)
+ usage();
+
+ /*
+ * From this point on, all non-numeric arguments are invalid unless -u
+ * (PRIO_USER). Numbers shall be unsigned integers.
+ */
for (; argc > 0; argc--, argv++) {
- if (strcmp(*argv, "-g") == 0) {
- which = PRIO_PGRP;
- continue;
- }
- if (strcmp(*argv, "-u") == 0) {
- which = PRIO_USER;
- continue;
- }
- if (strcmp(*argv, "-p") == 0) {
- which = PRIO_PROCESS;
- continue;
- }
- if (which == PRIO_USER) {
+ (void)strtol(*argv, &ep, 10);
+ if (*ep && which == PRIO_USER) {
pwd = getpwnam(*argv);
if (pwd == NULL) {
warnx("%s: unknown user", *argv);
@@ -109,20 +119,20 @@
}
who = pwd->pw_uid;
} else {
- if (getnum("pid", *argv, &who))
+ if (getnum("ID", *argv, &who))
continue;
if (who < 0) {
warnx("%s: bad value", *argv);
continue;
}
}
- errs += donice(which, who, prio, incr);
+ errs += donice(which, who, prio, nflag);
}
exit(errs != 0);
}
static int
-donice(int which, int who, int prio, int incr)
+donice(int which, int who, int prio, int nflag)
{
int oldprio;
@@ -132,17 +142,12 @@
warn("%d: getpriority", who);
return (1);
}
- if (incr)
- prio = oldprio + prio;
- if (prio > PRIO_MAX)
- prio = PRIO_MAX;
- if (prio < PRIO_MIN)
- prio = PRIO_MIN;
+ if (nflag)
+ prio = oldprio + prio; /* Possible over/underflow here. */
if (setpriority(which, who, prio) < 0) {
warn("%d: setpriority", who);
return (1);
}
- printf("%d: old priority %d, new priority %d\n", who, oldprio, prio);
return (0);
}
@@ -153,7 +158,7 @@
char *ep;
errno = 0;
- v = strtol(str, &ep, NULL);
+ v = strtol(str, &ep, 10);
if (v < INT_MIN || v > INT_MAX || errno == ERANGE) {
warnx("%s argument %s is out of range.", com, str);
return (1);
@@ -170,8 +175,8 @@
static void
usage()
{
- fprintf(stderr, "%s\n%s\n",
-"usage: renice [priority | [-n incr]] [ [ -p ] pids ] [ [ -g ] pgrps ]",
-" [ [ -u ] users ]");
- exit(1);
+
+ fprintf(stderr, "usage: renice nice_value [-g | -p | -u] ID ...\n");
+ fprintf(stderr, " renice -n increment [-g | -p | -u] ID ...\n");
+ exit(EX_USAGE);
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-standards" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204202000.g3KK07V50494>
