diff options
author | Lennart Poettering <lennart@poettering.net> | 2008-05-18 19:09:14 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2008-05-18 19:09:14 +0000 |
commit | 3c7a7952b23e916babbdb035ca8b5ecab458fbe1 (patch) | |
tree | 3af2b8d51b98d93fa22e617b5de507d00c93808f /src/pulsecore/core-util.c | |
parent | 0a2b6dd38f4526928d552b3019466bf3a0ae7077 (diff) |
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
Diffstat (limited to 'src/pulsecore/core-util.c')
-rw-r--r-- | src/pulsecore/core-util.c | 31 |
1 files changed, 20 insertions, 11 deletions
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; } } |