summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-07-10 16:53:50 +0000
committerLennart Poettering <lennart@poettering.net>2007-07-10 16:53:50 +0000
commit827e68f36b266d37eced5e69e35d457aff20ef41 (patch)
treed3477001f9fdaf464a5e7077fc5f9cd81c70816b
parent7956f197176dba9ce5d96752b169a261b1439a04 (diff)
Fix brown paper bag bug with handling the first argument passed to daemon_close_all(). Patch supplied by Sjoerd Simons
git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@127 153bfa13-eec0-0310-be40-b0cb6a0e1b4b
-rw-r--r--libdaemon/dfork.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c
index 2aa70f0..3131e3d 100644
--- a/libdaemon/dfork.c
+++ b/libdaemon/dfork.c
@@ -354,14 +354,15 @@ int daemon_retval_wait(int timeout) {
int daemon_close_all(int except_fd, ...) {
va_list original_ap, ap;
- int n, i, r;
+ int n = 0, i, r;
int *p;
va_start(original_ap, except_fd);
va_copy(ap, original_ap);
- for (n = 0; va_arg(ap, int) >= 0; n++)
- ;
+ if (except_fd >= 0)
+ for (n = 1; va_arg(ap, int) >= 0; n++)
+ ;
va_end(ap);
@@ -371,9 +372,12 @@ int daemon_close_all(int except_fd, ...) {
}
i = 0;
- while ((p[i++] = va_arg(original_ap, int)) >= 0)
- ;
-
+ if (except_fd >= 0) {
+ p[i++] = except_fd;
+
+ while ((p[i++] = va_arg(original_ap, int)) >= 0)
+ ;
+ }
p[i] = -1;
r = daemon_close_allv(p);