1*c9945492SAndroid Build Coastguard Worker #include <unistd.h> 2*c9945492SAndroid Build Coastguard Worker #include <errno.h> 3*c9945492SAndroid Build Coastguard Worker #include <sys/resource.h> 4*c9945492SAndroid Build Coastguard Worker #include <limits.h> 5*c9945492SAndroid Build Coastguard Worker #include "syscall.h" 6*c9945492SAndroid Build Coastguard Worker nice(int inc)7*c9945492SAndroid Build Coastguard Workerint nice(int inc) 8*c9945492SAndroid Build Coastguard Worker { 9*c9945492SAndroid Build Coastguard Worker int prio = inc; 10*c9945492SAndroid Build Coastguard Worker // Only query old priority if it can affect the result. 11*c9945492SAndroid Build Coastguard Worker // This also avoids issues with integer overflow. 12*c9945492SAndroid Build Coastguard Worker if (inc > -2*NZERO && inc < 2*NZERO) 13*c9945492SAndroid Build Coastguard Worker prio += getpriority(PRIO_PROCESS, 0); 14*c9945492SAndroid Build Coastguard Worker if (prio > NZERO-1) prio = NZERO-1; 15*c9945492SAndroid Build Coastguard Worker if (prio < -NZERO) prio = -NZERO; 16*c9945492SAndroid Build Coastguard Worker if (setpriority(PRIO_PROCESS, 0, prio)) { 17*c9945492SAndroid Build Coastguard Worker if (errno == EACCES) 18*c9945492SAndroid Build Coastguard Worker errno = EPERM; 19*c9945492SAndroid Build Coastguard Worker return -1; 20*c9945492SAndroid Build Coastguard Worker } else { 21*c9945492SAndroid Build Coastguard Worker return prio; 22*c9945492SAndroid Build Coastguard Worker } 23*c9945492SAndroid Build Coastguard Worker } 24