From 17da9c855a49925333433b4308c1b3384c65c50a Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 19 Apr 2024 14:23:16 -0400 Subject: config: Check for fdclosedir() --- config/fdclosedir.c | 8 ++++++++ config/header.mk | 1 + src/dir.c | 2 +- src/dir.h | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 config/fdclosedir.c 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 +// SPDX-License-Identifier: 0BSD + +#include + +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 -- cgit v1.2.3