aboutsummaryrefslogtreecommitdiff
path: root/posix
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2021-11-08 10:20:23 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2021-11-24 09:09:37 -0300
commit456b3c08b6fe78938af5d12b6869dc8c704696d6 (patch)
treebea5ff2432a7f589afccc126efb5ac8ab3b2c2b9 /posix
parente186fc5a31e46f2cbf5ea1a75223b4412907f3d8 (diff)
downloadglibc-456b3c08b6fe78938af5d12b6869dc8c704696d6.zip
glibc-456b3c08b6fe78938af5d12b6869dc8c704696d6.tar.gz
glibc-456b3c08b6fe78938af5d12b6869dc8c704696d6.tar.bz2
io: Refactor close_range and closefrom
Now that Hurd implementis both close_range and closefrom (f2c996597d), we can make close_range() a base ABI, and make the default closefrom() implementation on top of close_range(). The generic closefrom() implementation based on __getdtablesize() is moved to generic close_range(). On Linux it will be overriden by the auto-generation syscall while on Hurd it will be a system specific implementation. The closefrom() now calls close_range() and __closefrom_fallback(). Since on Hurd close_range() does not fail, __closefrom_fallback() is an empty static inline function set by__ASSUME_CLOSE_RANGE. The __ASSUME_CLOSE_RANGE also allows optimize Linux __closefrom_fallback() implementation when --enable-kernel=5.9 or higher is used. Finally the Linux specific tst-close_range.c is moved to io and enabled as default. The Linuxism and CLOSE_RANGE_UNSHARE are guarded so it can be built for Hurd (I have not actually test it). Checked on x86_64-linux-gnu, i686-linux-gnu, and with a i686-gnu build.
Diffstat (limited to 'posix')
-rw-r--r--posix/unistd.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/posix/unistd.h b/posix/unistd.h
index 7a61ff5..3c8a7ce 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -1199,6 +1199,16 @@ int getentropy (void *__buffer, size_t __length) __wur
__attr_access ((__write_only__, 1, 2));
#endif
+#ifdef __USE_GNU
+/* Close all file descriptors in the range FD up to MAX_FD. The flag FLAGS
+ are define by the CLOSE_RANGE prefix. This function behaves like close
+ on the range and gaps where the file descriptor is invalid or errors
+ encountered while closing file descriptors are ignored. Returns 0 on
+ successor or -1 for failure (and sets errno accordingly). */
+extern int close_range (unsigned int __fd, unsigned int __max_fd,
+ int __flags) __THROW;
+#endif
+
/* Define some macros helping to catch buffer overflows. */
#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
# include <bits/unistd.h>