diff options
author | Max Kellermann <max@duempel.org> | 2010-08-03 18:03:55 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2010-08-03 18:03:55 +0200 |
commit | 68c02fc95af57a0b3be64aa214125be2d3ed1cf7 (patch) | |
tree | baf4db9e06b50ac07555a8d89d9885cdf3dce916 | |
parent | d18c1b1a0ab57d77ba823cfedf40077d24dafbd7 (diff) | |
download | mpd-68c02fc95af57a0b3be64aa214125be2d3ed1cf7.tar.gz mpd-68c02fc95af57a0b3be64aa214125be2d3ed1cf7.tar.xz mpd-68c02fc95af57a0b3be64aa214125be2d3ed1cf7.zip |
fd_util: add function dup_cloexec()
Unfortunately, there's no "optimized" implementation here. We can't
use Linux's proprietary system call dup3(), because it would require
us to specify the new descriptor.
-rw-r--r-- | src/fd_util.c | 10 | ||||
-rw-r--r-- | src/fd_util.h | 7 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/fd_util.c b/src/fd_util.c index b9443b03d..769823bc4 100644 --- a/src/fd_util.c +++ b/src/fd_util.c @@ -104,6 +104,16 @@ fd_set_nonblock(int fd) } int +dup_cloexec(int oldfd) +{ + int newfd = dup(oldfd); + if (newfd >= 0) + fd_set_nonblock(newfd); + + return newfd; +} + +int open_cloexec(const char *path_fs, int flags, int mode) { int fd; diff --git a/src/fd_util.h b/src/fd_util.h index 80fb98703..5b80df2c7 100644 --- a/src/fd_util.h +++ b/src/fd_util.h @@ -50,6 +50,13 @@ struct sockaddr; /** + * Wrapper for dup(), which sets the CLOEXEC flag on the new + * descriptor. + */ +int +dup_cloexec(int oldfd); + +/** * Wrapper for open(), which sets the CLOEXEC flag (atomically if * supported by the OS). */ |