diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-07-10 16:53:50 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-07-10 16:53:50 +0000 |
commit | 827e68f36b266d37eced5e69e35d457aff20ef41 (patch) | |
tree | d3477001f9fdaf464a5e7077fc5f9cd81c70816b | |
parent | 7956f197176dba9ce5d96752b169a261b1439a04 (diff) | |
download | platform_external_libdaemon-827e68f36b266d37eced5e69e35d457aff20ef41.tar.gz platform_external_libdaemon-827e68f36b266d37eced5e69e35d457aff20ef41.tar.bz2 platform_external_libdaemon-827e68f36b266d37eced5e69e35d457aff20ef41.zip |
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.c | 16 |
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); |