summaryrefslogtreecommitdiff
path: root/runit/runsvdir.c
diff options
context:
space:
mode:
authorDenis Vlasenko2008-05-31 07:00:33 +0000
committerDenis Vlasenko2008-05-31 07:00:33 +0000
commit8f74094548a1147ed7b459ca771343483b1c202c (patch)
tree2c43fc4d181a71cb4c9a25cd520cb8367c6e85a6 /runit/runsvdir.c
parent447bd6683729eb6d0f09e30eb68add6297881d01 (diff)
downloadbusybox-8f74094548a1147ed7b459ca771343483b1c202c.zip
busybox-8f74094548a1147ed7b459ca771343483b1c202c.tar.gz
runsvdir: make it more robust against libc buglets (errno accidentally set to !0)
closes bug 3514 function old new delta runsvdir_main 1672 1664 -8
Diffstat (limited to 'runit/runsvdir.c')
-rw-r--r--runit/runsvdir.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index b4450c0..df6b886 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -141,8 +141,12 @@ static void runsvdir(void)
}
for (i = 0; i < svnum; i++)
sv[i].isgone = 1;
- errno = 0;
- while ((d = readdir(dir))) {
+
+ while (1) {
+ errno = 0;
+ d = readdir(dir);
+ if (!d)
+ break;
if (d->d_name[0] == '.')
continue;
if (stat(d->d_name, &s) == -1) {
@@ -194,6 +198,7 @@ static void runsvdir(void)
if (sv[i].pid)
kill(sv[i].pid, SIGTERM);
sv[i] = sv[--svnum];
+/* BUG? we deleted sv[i] by copying over sv[last], but we will not check this newly-copied one! */
check = 1;
}
}