diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-04-06 23:35:59 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-04-06 23:35:59 +0200 |
commit | a0d40ac588701010ea6a9366f6a874e83844858e (patch) | |
tree | c50229adee7a3dec87b966cb36c6f6a164a05c34 /execute.c | |
parent | 2882c7eda072e218516df584d2489f996d01dcf6 (diff) |
util: move close_all_fds() to util.c
Diffstat (limited to 'execute.c')
-rw-r--r-- | execute.c | 53 |
1 files changed, 3 insertions, 50 deletions
@@ -44,61 +44,14 @@ #include "securebits.h" #include "cgroup.h" -static int close_fds(int except[], unsigned n_except) { - DIR *d; - struct dirent *de; - int r = 0; - - /* Modifies the fds array! (sorts it) */ - - if (!(d = opendir("/proc/self/fd"))) - return -errno; - - while ((de = readdir(d))) { - int fd; - - if (de->d_name[0] == '.') - continue; - - if ((r = safe_atoi(de->d_name, &fd)) < 0) - goto finish; - - if (fd < 3) - continue; - - if (fd == dirfd(d)) - continue; - - if (except) { - bool found; - unsigned i; - - found = false; - for (i = 0; i < n_except; i++) - if (except[i] == fd) { - found = true; - break; - } - - if (found) - continue; - } - - if ((r = close_nointr(fd)) < 0) - goto finish; - } - -finish: - closedir(d); - return r; -} - static int shift_fds(int fds[], unsigned n_fds) { int start, restart_from; if (n_fds <= 0) return 0; + /* Modifies the fds array! (sorts it) */ + assert(fds); start = 0; @@ -653,7 +606,7 @@ int exec_spawn(const ExecCommand *command, free(d); } - if (close_fds(fds, n_fds) < 0 || + if (close_all_fds(fds, n_fds) < 0 || shift_fds(fds, n_fds) < 0 || flags_fds(fds, n_fds, context->non_blocking) < 0) { r = EXIT_FDS; |