]> git.saurik.com Git - apple/libc.git/blobdiff - gen/FreeBSD/nice.c
Libc-1353.11.2.tar.gz
[apple/libc.git] / gen / FreeBSD / nice.c
index f24d12d117e6a572ba8e8efc8584573389192843..962eee10bc7f4baaa32d5c2c678e7d102980c75b 100644 (file)
@@ -38,7 +38,9 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/nice.c,v 1.4 2007/01/09 00:27:54 imp Exp $"
 #include <sys/resource.h>
 #include <errno.h>
 #include <unistd.h>
-
+#if __DARWIN_UNIX03
+#include <limits.h>
+#endif /* __DARWIN_UNIX03 */
 /*
  * Backwards compatible nice.
  */
@@ -46,11 +48,18 @@ int
 nice(incr)
        int incr;
 {
-       int prio;
+       int prio, rv;
 
        errno = 0;
        prio = getpriority(PRIO_PROCESS, 0);
        if (prio == -1 && errno)
                return (-1);
-       return (setpriority(PRIO_PROCESS, 0, prio + incr));
+#if __DARWIN_UNIX03
+       if (prio + incr > NZERO-1)
+               incr = NZERO-1-prio;
+#endif /* __DARWIN_UNIX03 */
+       rv = setpriority(PRIO_PROCESS, 0, prio + incr);
+       if (rv == -1 && errno == EACCES)
+               errno = EPERM;
+       return (rv == -1) ? rv : getpriority(PRIO_PROCESS, 0);
 }