(UTILS_FUNC_DIRFD): New macro.
authorJim Meyering <jim@meyering.net>
Thu, 1 Nov 2001 16:41:57 +0000 (16:41 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 1 Nov 2001 16:41:57 +0000 (16:41 +0000)
m4/dirfd.m4 [new file with mode: 0644]

diff --git a/m4/dirfd.m4 b/m4/dirfd.m4
new file mode 100644 (file)
index 0000000..b62e12a
--- /dev/null
@@ -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
+])