From 3c7a7952b23e916babbdb035ca8b5ecab458fbe1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 18 May 2008 19:09:14 +0000 Subject: fix pa_close_all() to make it actually work as advertised git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@2464 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/pulsecore/core-util.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'src/pulsecore/core-util.c') diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index c8ea4f52..cabca545 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -1774,10 +1774,11 @@ int pa_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; @@ -1803,6 +1804,7 @@ int pa_close_allv(const int except_fds[]) { struct dirent *de; while ((de = readdir(d))) { + pa_bool_t found; long l; char *e = NULL; int i; @@ -1826,17 +1828,23 @@ int pa_close_allv(const int except_fds[]) { return -1; } - if (fd <= 3) + if (fd < 3) continue; if (fd == dirfd(d)) continue; + found = FALSE; for (i = 0; except_fds[i] >= 0; i++) - if (except_fds[i] == fd) - continue; + if (except_fds[i] == fd) { + found = TRUE; + break; + } - if (close(fd) < 0) { + if (found) + continue; + + if (pa_close(fd) < 0) { saved_errno = errno; closedir(d); errno = saved_errno; @@ -1890,10 +1898,11 @@ int pa_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; @@ -1957,12 +1966,12 @@ int pa_reset_sigsv(const int except[]) { int sig; for (sig = 1; sig < _NSIG; sig++) { - int reset = 1; + pa_bool_t reset = TRUE; switch (sig) { case SIGKILL: case SIGSTOP: - reset = 0; + reset = FALSE; break; default: { @@ -1970,7 +1979,7 @@ int pa_reset_sigsv(const int except[]) { for (i = 0; except[i] > 0; i++) { if (sig == except[i]) { - reset = 0; + reset = FALSE; break; } } -- cgit