Re: renice(8): don't succeed after 256 errors

2022-08-11 Thread Todd C . Miller
On Thu, 11 Aug 2022 17:55:08 -0500, Scott Cheloha wrote:

> Fix is to just set error instead of incrementing it.

Sure.  OK millert@

 - todd



renice(8): don't succeed after 256 errors

2022-08-11 Thread Scott Cheloha
This is a good one.

$ renice -n -1 -p 1 ; echo $?
renice: setpriority: 1: Operation not permitted
1
$ renice -n -1 -p 1 1 ; echo $?
renice: setpriority: 1: Operation not permitted
renice: setpriority: 1: Operation not permitted
2
$ renice -n -1 -p 1 1 1 ; echo $?
renice: setpriority: 1: Operation not permitted
renice: setpriority: 1: Operation not permitted
renice: setpriority: 1: Operation not permitted
3
$ renice -n -1 -p $(jot -b 1 256) 2>/dev/null; echo $?
0

Fix is to just set error instead of incrementing it.

ok?

Index: renice.c
===
RCS file: /cvs/src/usr.bin/renice/renice.c,v
retrieving revision 1.21
diff -u -p -r1.21 renice.c
--- renice.c25 Jan 2019 00:19:26 -  1.21
+++ renice.c11 Aug 2022 22:49:23 -
@@ -155,14 +155,14 @@ main(int argc, char **argv)
 static int
 renice(struct renice_param *p, struct renice_param *end)
 {
-   int new, old, errors = 0;
+   int new, old, error = 0;
 
for (; p < end; p++) {
errno = 0;
old = getpriority(p->id_type, p->id);
if (errno) {
warn("getpriority: %d", p->id);
-   errors++;
+   error = 1;
continue;
}
if (p->pri_type == RENICE_INCREMENT)
@@ -171,13 +171,13 @@ renice(struct renice_param *p, struct re
p->pri < PRIO_MIN ? PRIO_MIN : p->pri;
if (setpriority(p->id_type, p->id, new) == -1) {
warn("setpriority: %d", p->id);
-   errors++;
+   error = 1;
continue;
}
printf("%d: old priority %d, new priority %d\n",
p->id, old, new);
}
-   return (errors);
+   return error;
 }
 
 __dead void