c01641c897
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)
49 lines
798 B
C
49 lines
798 B
C
/* See LICENSE file for copyright and license details. */
|
|
#include <sys/resource.h>
|
|
|
|
#include <errno.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
|
|
#include "util.h"
|
|
|
|
static void
|
|
usage(void)
|
|
{
|
|
eprintf("usage: %s [-n inc] cmd [arg ...]\n", argv0);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int val = 10, r, savederrno;
|
|
|
|
ARGBEGIN {
|
|
case 'n':
|
|
val = estrtonum(EARGF(usage()), PRIO_MIN, PRIO_MAX);
|
|
break;
|
|
default:
|
|
usage();
|
|
break;
|
|
} ARGEND;
|
|
|
|
if (!argc)
|
|
usage();
|
|
|
|
errno = 0;
|
|
r = getpriority(PRIO_PROCESS, 0);
|
|
if (errno)
|
|
weprintf("getpriority:");
|
|
else
|
|
val += r;
|
|
LIMIT(val, PRIO_MIN, PRIO_MAX);
|
|
if (setpriority(PRIO_PROCESS, 0, val) < 0)
|
|
weprintf("setpriority:");
|
|
|
|
execvp(argv[0], argv);
|
|
savederrno = errno;
|
|
weprintf("execvp %s:", argv[0]);
|
|
|
|
return 126 + (savederrno == ENOENT);
|
|
}
|