summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-07-28 23:26:56 +0200
committerLennart Poettering <lennart@poettering.net>2008-07-28 23:26:56 +0200
commit91f7f12e1aab3b3793000f3a9cbb027b7a62b2a5 (patch)
treee458aae5a1ca14cbbedbe82797b068c646444b0a
parent1ef4fbda1b9a9087b967a2ba0fab5db9eb3844db (diff)
fix a few thinkos in handling of exception lists
-rw-r--r--libdaemon/dfork.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c
index 44d815c..f1ba7c1 100644
--- a/libdaemon/dfork.c
+++ b/libdaemon/dfork.c
@@ -447,10 +447,11 @@ int daemon_close_all(int except_fd, ...) {
i = 0;
if (except_fd >= 0) {
+ int fd;
p[i++] = except_fd;
- while ((p[i++] = va_arg(ap, int)) >= 0)
- ;
+ while ((fd = va_arg(ap, int)) >= 0)
+ p[i++] = fd;
}
p[i] = -1;
@@ -480,9 +481,10 @@ int daemon_close_allv(const int except_fds[]) {
struct dirent *de;
while ((de = readdir(d))) {
+ int found;
long l;
char *e = NULL;
- int i, fd;
+ int i;
if (de->d_name[0] == '.')
continue;
@@ -512,9 +514,15 @@ int daemon_close_allv(const int except_fds[]) {
if (fd == _daemon_retval_pipe[1])
continue;
+ found = 0;
for (i = 0; except_fds[i] >= 0; i++)
- if (except_fds[i] == fd)
- continue;
+ if (except_fds[i] == fd) {
+ found = 1;
+ break;
+ }
+
+ if (found)
+ continue;
if (close(fd) < 0) {
saved_errno = errno;
@@ -535,7 +543,7 @@ int daemon_close_allv(const int except_fds[]) {
return -1;
for (fd = 0; fd < (int) rl.rlim_max; fd++) {
- int i;
+ int i, found;
if (fd <= 3)
continue;
@@ -543,9 +551,15 @@ int daemon_close_allv(const int except_fds[]) {
if (fd == _daemon_retval_pipe[1])
continue;
+ found = 0;
for (i = 0; except_fds[i] >= 0; i++)
- if (except_fds[i] == fd)
- continue;
+ if (except_fds[i] == fd) {
+ found = 1;
+ break;
+ }
+
+ if (found)
+ continue;
if (close(fd) < 0 && errno != EBADF)
return -1;
@@ -575,10 +589,11 @@ int daemon_unblock_sigs(int except, ...) {
i = 0;
if (except >= 1) {
+ int sig;
p[i++] = except;
- while ((p[i++] = va_arg(ap, int)) >= 0)
- ;
+ while ((sig = va_arg(ap, int)) >= 0)
+ p[i++] = sig;
}
p[i] = -1;
@@ -628,10 +643,11 @@ int daemon_reset_sigs(int except, ...) {
i = 0;
if (except >= 1) {
+ int sig;
p[i++] = except;
- while ((p[i++] = va_arg(ap, int)) >= 0)
- ;
+ while ((sig = va_arg(ap, int)) >= 0)
+ p[i++] = sig;
}
p[i] = -1;