summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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