summaryrefslogtreecommitdiff
path: root/lib/libc/unistd/nice.c
blob: 29ac8487fb0f7ea8508cb72f14cf9e30cd987cf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <errno.h>
#include <limits.h>
#include <sys/resource.h>
#include <unistd.h>

int nice(int incr)
{
	int priority = incr;

	if (incr > NZERO * -2 && incr < NZERO * 2) {
		priority += getpriority(PRIO_PROCESS, 0);
	}

	if (priority > NZERO - 1)
		priority = NZERO - 1;

	if (priority < -NZERO)
		priority = -NZERO;

	if (setpriority(PRIO_PROCESS, 0, priority)) {
		if (errno == EACCES)
			errno = EPERM;

		return -1;
	}

	return priority;
}