X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Funistd%2Fnice.c;h=6c25c8c326a72f26ad6d8a5359f85dc669d59d1f;hb=e95538fa07d2b460b25ee6c2fef05f820888776d;hp=da56996776e26aedd31b4c5495d24797cfbce070;hpb=c2cd25bff89c3581780e7eb267262cb8c4da0d38;p=musl diff --git a/src/unistd/nice.c b/src/unistd/nice.c index da569967..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 SYS_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; }