Audit nice(1)
1) val is sufficient as "int" (read the standard) 2) BUGFIX: If getpriority fails, it returns -1 and sets errno. Previously, it would correctly catch the errno but not take care of the fact that by then val has been decremented by 1. Only change val if the getpriority-call has been successful. 3) Add LIMIT()-macro from st to increase readability. 4) setpriority returns < 0 on failure 5) Remove bikeshedding-comment. Read the standard if you wonder. 6) return-value trick from env(1)
This commit is contained in:
parent
46f743705b
commit
c01641c897
2
README
2
README
@ -47,7 +47,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
|
||||
=* mkfifo yes none
|
||||
=* mktemp non-posix none
|
||||
=* mv yes none (-i)
|
||||
=* nice yes none
|
||||
=*| nice yes none
|
||||
= nl no -d, -f, -h, -l, -p
|
||||
=* nohup yes none
|
||||
#* paste yes none
|
||||
|
4
nice.1
4
nice.1
@ -1,4 +1,4 @@
|
||||
.Dd January 28, 2015
|
||||
.Dd March 1, 2015
|
||||
.Dt NICE 1
|
||||
.Os sbase
|
||||
.Sh NAME
|
||||
@ -25,7 +25,7 @@ ranging from
|
||||
.Sy -20
|
||||
(highest priority)
|
||||
to
|
||||
.Sy +19
|
||||
.Sy +20
|
||||
(lowest priority).
|
||||
Default is 10.
|
||||
.El
|
||||
|
19
nice.c
19
nice.c
@ -16,8 +16,7 @@ usage(void)
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
long val = 10;
|
||||
int savederrno;
|
||||
int val = 10, r, savederrno;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'n':
|
||||
@ -28,20 +27,22 @@ main(int argc, char *argv[])
|
||||
break;
|
||||
} ARGEND;
|
||||
|
||||
if (argc == 0)
|
||||
if (!argc)
|
||||
usage();
|
||||
|
||||
errno = 0;
|
||||
val += getpriority(PRIO_PROCESS, 0);
|
||||
if (errno != 0)
|
||||
r = getpriority(PRIO_PROCESS, 0);
|
||||
if (errno)
|
||||
weprintf("getpriority:");
|
||||
val = MAX(PRIO_MIN, MIN(val, PRIO_MAX));
|
||||
if (setpriority(PRIO_PROCESS, 0, val) != 0)
|
||||
else
|
||||
val += r;
|
||||
LIMIT(val, PRIO_MIN, PRIO_MAX);
|
||||
if (setpriority(PRIO_PROCESS, 0, val) < 0)
|
||||
weprintf("setpriority:");
|
||||
|
||||
/* POSIX specifies the nice failure still invokes the command */
|
||||
execvp(argv[0], argv);
|
||||
savederrno = errno;
|
||||
weprintf("execvp %s:", argv[0]);
|
||||
return (savederrno == ENOENT)? 127 : 126;
|
||||
|
||||
return 126 + (savederrno == ENOENT);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user