From 827e68f36b266d37eced5e69e35d457aff20ef41 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 10 Jul 2007 16:53:50 +0000 Subject: 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 --- libdaemon/dfork.c | 16 ++++++++++------ 1 file 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); -- cgit