summaryrefslogtreecommitdiff
path: root/src/basic/fd-util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-11-04 18:20:19 +0100
committerLennart Poettering <lennart@poettering.net>2022-11-04 18:46:42 +0100
commited18c22c989495aab36512f03449222cfcf79aa7 (patch)
tree0eab5465c3269db20effa70420f40dee43b3f7e8 /src/basic/fd-util.c
parentd11c14a9817f6561a30d96d8faea126a4c811af8 (diff)
downloadsystemd-ed18c22c989495aab36512f03449222cfcf79aa7.tar.gz
fd-util: add new fd_cloexec_many() helper
Diffstat (limited to 'src/basic/fd-util.c')
-rw-r--r--src/basic/fd-util.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c
index 6ed04449bf..66bb7569bb 100644
--- a/src/basic/fd-util.c
+++ b/src/basic/fd-util.c
@@ -174,6 +174,25 @@ int fd_cloexec(int fd, bool cloexec) {
return RET_NERRNO(fcntl(fd, F_SETFD, nflags));
}
+int fd_cloexec_many(const int fds[], size_t n_fds, bool cloexec) {
+ int ret = 0, r;
+
+ assert(n_fds == 0 || fds);
+
+ for (size_t i = 0; i < n_fds; i++) {
+ if (fds[i] < 0) /* Skip gracefully over already invalidated fds */
+ continue;
+
+ r = fd_cloexec(fds[i], cloexec);
+ if (r < 0 && ret >= 0) /* Continue going, but return first error */
+ ret = r;
+ else
+ ret = 1; /* report if we did anything */
+ }
+
+ return ret;
+}
+
_pure_ static bool fd_in_set(int fd, const int fdset[], size_t n_fdset) {
assert(n_fdset == 0 || fdset);