summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-04-19 14:23:16 -0400
committerTavian Barnes <tavianator@tavianator.com>2024-04-19 15:50:45 -0400
commit17da9c855a49925333433b4308c1b3384c65c50a (patch)
treef53a669cd9e1f1d05ba72508d7fcba182d5e28f3
parent6cdb407aa23d8b129e9b9a49a4528c3e0def69e6 (diff)
config: Check for fdclosedir()
-rw-r--r--config/fdclosedir.c8
-rw-r--r--config/header.mk1
-rw-r--r--src/dir.c2
-rw-r--r--src/dir.h2
4 files changed, 11 insertions, 2 deletions
diff --git a/config/fdclosedir.c b/config/fdclosedir.c
new file mode 100644
index 0000000..f4ad1f5
--- /dev/null
+++ b/config/fdclosedir.c
@@ -0,0 +1,8 @@
+// Copyright © Tavian Barnes <tavianator@tavianator.com>
+// SPDX-License-Identifier: 0BSD
+
+#include <dirent.h>
+
+int main(void) {
+ return fdclosedir(opendir("."));
+}
diff --git a/config/header.mk b/config/header.mk
index 36ad98e..04fbdec 100644
--- a/config/header.mk
+++ b/config/header.mk
@@ -11,6 +11,7 @@ include config/exports.mk
HEADERS := \
${GEN}/acl-is-trivial-np.h \
${GEN}/confstr.h \
+ ${GEN}/fdclosedir.h \
${GEN}/getdents.h \
${GEN}/getdents64.h \
${GEN}/getdents64-syscall.h \
diff --git a/src/dir.c b/src/dir.c
index 8b1bee0..cfbbca4 100644
--- a/src/dir.c
+++ b/src/dir.c
@@ -353,7 +353,7 @@ int bfs_closedir(struct bfs_dir *dir) {
int bfs_unwrapdir(struct bfs_dir *dir) {
#if BFS_USE_GETDENTS
int ret = dir->fd;
-#elif __FreeBSD__
+#elif BFS_HAS_FDCLOSEDIR
int ret = fdclosedir(dir->dir);
#endif
diff --git a/src/dir.h b/src/dir.h
index 19dfa98..bc6c4ed 100644
--- a/src/dir.h
+++ b/src/dir.h
@@ -152,7 +152,7 @@ int bfs_closedir(struct bfs_dir *dir);
* Whether the bfs_unwrapdir() function is supported.
*/
#ifndef BFS_USE_UNWRAPDIR
-# define BFS_USE_UNWRAPDIR (BFS_USE_GETDENTS || __FreeBSD__)
+# define BFS_USE_UNWRAPDIR (BFS_USE_GETDENTS || BFS_HAS_FDCLOSEDIR)
#endif
#if BFS_USE_UNWRAPDIR