--- dietlibc-0.27/lib/nice.c.glibc-nice 2005-01-18 10:05:04.845094620 -0500 +++ dietlibc-0.27/lib/nice.c 2005-01-18 10:05:04.845094620 -0500 @@ -0,0 +1,55 @@ +/* Copyright (C) 1992, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <unistd.h> +#include <sys/resource.h> + +/* Increment the scheduling priority of the calling process by INCR. + The superuser may use a negative INCR to decrement the priority. */ +int +nice (int incr) +{ + int save; + int prio; + int result; + + /* -1 is a valid priority, so we use errno to check for an error. */ + save = errno; + __set_errno (0); + prio = getpriority (PRIO_PROCESS, 0); + if (prio == -1) + { + if (errno != 0) + return -1; + else + __set_errno (save); + } + + prio += incr; + if (prio < PRIO_MIN) + prio = PRIO_MIN; + else if (prio >= PRIO_MAX) + prio = PRIO_MAX - 1; + result = setpriority (PRIO_PROCESS, 0, prio); + if (result != -1) + return getpriority (PRIO_PROCESS, 0); + else + return -1; + +} --- dietlibc-0.27/test/test-nice.c.glibc-nice 2005-01-18 10:05:04.846094822 -0500 +++ dietlibc-0.27/test/test-nice.c 2005-01-18 10:05:04.846094822 -0500 @@ -0,0 +1,70 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + + +/* Test that nice() does not incorrectly return 0. */ +static int +do_test (void) +{ + int ret; + const int incr = 10; + int old; + + /* Discover current nice value. */ + errno = 0; + old = nice (0); + if (old == -1 && errno != 0) + { + printf ("break: nice(%d) return: %d, %m\n", 0, old); + return 1; + } + + /* Nice ourselves up. */ + errno = 0; + ret = nice (incr); + if (ret == -1 && errno != 0) + { + printf ("break: nice(%d) return: %d, %m\n", incr, ret); + return 1; + } + + /* Check for return value being zero when it shouldn't. Cannot simply + check for expected value since nice values are capped at 2^n-1. + But we assume that we didn't start at the cap and so should have + increased some. */ + if (ret <= old) + { + printf ("FAIL: retval (%d) of nice(%d) != %d\n", ret, incr, old + incr); + return 1; + } + + printf ("PASS: nice(%d) from %d return: %d\n", incr, old, ret); + + return 0; +} + +int main(void) +{ + if (do_test() != 0) + abort(); +} --- dietlibc-0.27/syscalls.s/nice.S.glibc-nice 2002-11-09 13:23:19.000000000 -0500 +++ dietlibc-0.27/syscalls.s/nice.S 2005-01-18 10:05:24.518063081 -0500 @@ -1,5 +0,0 @@ -#include "syscalls.h" - -#ifdef __NR_nice -syscall(nice,nice) -#endif