提交 4bf0717e 编写于 作者: R Rich Felker

fix return value of nice function

the Linux SYS_nice syscall is unusable because it does not return the
newly set priority. always use SYS_setpriority. also avoid overflows
in addition of inc by handling large inc values directly without
examining the old nice value.
上级 424eab22
#include <unistd.h>
#include <sys/resource.h>
#include <limits.h>
#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;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册