summaryrefslogtreecommitdiff
path: root/m4/dirfd.m4
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2001-11-01 16:41:57 +0000
committerJim Meyering <jim@meyering.net>2001-11-01 16:41:57 +0000
commit7e7fa1da8c3471b86ff76898f4e73d2c43bcd6e8 (patch)
tree6b05d1fb2d628ea17e378d0b7a6ee2fdac14c276 /m4/dirfd.m4
parent7c6a48b9fd02bb0efedee0a44155a4e59bd670e6 (diff)
downloadgnulib-7e7fa1da8c3471b86ff76898f4e73d2c43bcd6e8.tar.gz
(UTILS_FUNC_DIRFD): New macro.
Diffstat (limited to 'm4/dirfd.m4')
-rw-r--r--m4/dirfd.m449
1 files changed, 49 insertions, 0 deletions
diff --git a/m4/dirfd.m4 b/m4/dirfd.m4
new file mode 100644
index 0000000000..b62e12a54f
--- /dev/null
+++ b/m4/dirfd.m4
@@ -0,0 +1,49 @@
+#serial 1
+
+dnl Find out how to get the file descriptor associated with an open DIR*.
+dnl From Jim Meyering
+
+AC_DEFUN([UTILS_FUNC_DIRFD],
+[
+ AC_REPLACE_FUNCS([dirfd])
+ if test $ac_cv_func_dirfd = no; then
+ AC_CACHE_CHECK(
+ [how to get the file descriptor associated with an open DIR*],
+ ac_cv_sys_dir_to_fd,
+ [
+ dirfd_save_DEFS=$DEFS
+ for ac_expr in \
+ \
+ '# Solaris' \
+ 'dir_p->d_fd' \
+ \
+ '# Solaris' \
+ 'dir_p->dd_fd' \
+ \
+ '# systems for which the info is not available' \
+ -1 \
+ ; do
+
+ # Skip each embedded comment.
+ case "$ac_expr" in '#'*) continue;; esac
+
+ DEFS="$DEFS -DDIR_TO_FD=$ac_expr"
+ AC_TRY_COMPILE(
+ [#include <sys/types.h>
+ #include <dirent.h>
+ ],
+ [DIR *dir_p = opendir("."); (void) ($ac_expr);],
+ dir_fd_done=yes
+ )
+ DEFS=$dirfd_save_DEFS
+ test "$dir_fd_done" = yes && break
+ done
+
+ ac_cv_sys_dir_to_fd=$ac_expr
+ ]
+ )
+ AC_DEFINE_UNQUOTED(DIR_TO_FD,
+ $ac_cv_sys_dir_to_fd,
+ [the file descriptor associated with `dir_p'])
+ fi
+])