diff options
author | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2010-10-20 21:10:01 +0000 |
---|---|---|
committer | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2010-10-20 21:10:01 +0000 |
commit | 6c71649c5f033d5c1e6d1899ad39b31cb576efe8 (patch) | |
tree | 2eaf62f555bde2375f4fed555c6eeb1295036bb2 /sbin/hastd/hooks.c | |
parent | 5ad4a7c74aecfa48612e6bb1845294b0cf8d1de8 (diff) | |
download | src-6c71649c5f033d5c1e6d1899ad39b31cb576efe8.tar.gz src-6c71649c5f033d5c1e6d1899ad39b31cb576efe8.zip |
Use closefrom(2) instead of close(2) in a loop.
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=214119
Diffstat (limited to 'sbin/hastd/hooks.c')
-rw-r--r-- | sbin/hastd/hooks.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/sbin/hastd/hooks.c b/sbin/hastd/hooks.c index 2e43357fdea9..bd132427e89b 100644 --- a/sbin/hastd/hooks.c +++ b/sbin/hastd/hooks.c @@ -88,32 +88,19 @@ static void hook_free(struct hookproc *hp); static void descriptors(void) { - long maxfd; int fd; /* - * Close all descriptors. + * Close all (or almost all) descriptors. */ - maxfd = sysconf(_SC_OPEN_MAX); - if (maxfd < 0) { - pjdlog_errno(LOG_WARNING, "sysconf(_SC_OPEN_MAX) failed"); - maxfd = 1024; - } - for (fd = 0; fd <= maxfd; fd++) { - switch (fd) { - case STDIN_FILENO: - case STDOUT_FILENO: - case STDERR_FILENO: - if (pjdlog_mode_get() == PJDLOG_MODE_STD) - break; - /* FALLTHROUGH */ - default: - close(fd); - break; - } - } - if (pjdlog_mode_get() == PJDLOG_MODE_STD) + if (pjdlog_mode_get() == PJDLOG_MODE_STD) { + closefrom(MAX(MAX(STDIN_FILENO, STDOUT_FILENO), + STDERR_FILENO) + 1); return; + } + + closefrom(0); + /* * Redirect stdin, stdout and stderr to /dev/null. */ |