X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Funistd%2Fnice.c;h=6c25c8c326a72f26ad6d8a5359f85dc669d59d1f;hb=5ef60206ff9e697d3011bcf48afca50c9fe85e1b;hp=34f7c7f9c8f3e5af47f5281aa2a088efd2d6394f;hpb=aa398f56fa398f2202b04e82c67f822f3233786f;p=musl diff --git a/src/unistd/nice.c b/src/unistd/nice.c index 34f7c7f9..6c25c8c3 100644 --- a/src/unistd/nice.c +++ b/src/unistd/nice.c @@ -1,12 +1,16 @@ #include #include +#include #include "syscall.h" int nice(int inc) { -#ifdef __NR_nice - return syscall(SYS_nice, inc); -#else - return setpriority(PRIO_PROCESS, 0, getpriority(PRIO_PROCESS, 0)+inc); -#endif + 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; + return setpriority(PRIO_PROCESS, 0, prio) ? -1 : prio; }