nice.c.patch   [plain text]


--- nice.c.orig	2009-11-07 14:51:38.000000000 -0800
+++ nice.c	2009-11-07 14:51:40.000000000 -0800
@@ -38,7 +38,9 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/nic
 #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);
 }