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>