summaryrefslogtreecommitdiff
path: root/execute.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-06 23:35:59 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-06 23:35:59 +0200
commita0d40ac588701010ea6a9366f6a874e83844858e (patch)
treec50229adee7a3dec87b966cb36c6f6a164a05c34 /execute.c
parent2882c7eda072e218516df584d2489f996d01dcf6 (diff)
util: move close_all_fds() to util.c
Diffstat (limited to 'execute.c')
-rw-r--r--execute.c53
1 files changed, 3 insertions, 50 deletions
diff --git a/execute.c b/execute.c
index 02f53dc485..31e1bdc252 100644
--- a/execute.c
+++ b/execute.c
@@ -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;