| #include <unistd.h> | |
| #include <errno.h> | |
| #include <sys/resource.h> | |
| #include <limits.h> | |
| #include "syscall.h" | |
| int nice(int inc) | |
| { | |
| int prio = inc; | |
| // Only query old priority if it can affect the result. | |
| // This also avoids issues with integer overflow. | |
| if (inc > -2*NZERO && inc < 2*NZERO) | |
| prio += getpriority(PRIO_PROCESS, 0); | |
| if (prio > NZERO-1) prio = NZERO-1; | |
| if (prio < -NZERO) prio = -NZERO; | |
| if (setpriority(PRIO_PROCESS, 0, prio)) { | |
| if (errno == EACCES) | |
| errno = EPERM; | |
| return -1; | |
| } else { | |
| return prio; | |
| } | |
| } |