From 94a8d9c5e5a7a81848a1d812070d66559ee2c230 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Thu, 25 Feb 2010 22:18:32 -0800 Subject: [PATCH] autoconf test for dirfd and dd_fd --- cf/roken-frag.m4 | 19 +++++++++++++++++++ lib/roken/roken.h.in | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cf/roken-frag.m4 b/cf/roken-frag.m4 index ab63a0904..4cee8d4cd 100644 --- a/cf/roken-frag.m4 +++ b/cf/roken-frag.m4 @@ -392,6 +392,25 @@ AC_FOREACH([rk_func], [strsvis strsvisx strunvis strvis strvisx svis unvis vis], #include #endif], rk_func)]) +AC_MSG_CHECKING([checking for dirfd]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +#ifdef HAVE_DIRENT_H +#include +#endif +]], + [[DIR *d = 0; dirfd(d);]])], + [ac_rk_have_dirfd=yes], [ac_rk_have_dirfd=no]) +if test "$ac_rk_have_dirfd" = "yes" ; then + AC_DEFINE_UNQUOTED(HAVE_DIRFD, 1, [have a dirfd function/macro]) +fi +AC_MSG_RESULT($ac_rk_have_dirfd) + +AC_HAVE_STRUCT_FIELD(struct dirent, dd_fd, [#include +#ifdef HAVE_DIRENT_H +#include +#endif]) + + AC_BROKEN2(inet_aton, [#ifdef HAVE_SYS_TYPES_H #include diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index 6c264edc1..9debbb00b 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -652,8 +652,12 @@ ROKEN_LIB_FUNCTION unsigned short ROKEN_LIB_CALL bswap16(unsigned short); int rk_flock(int fd, int operation); #endif /* HAVE_FLOCK */ -#if defined(SunOS) || defined(_AIX) +#ifndef HAVE_DIRFD +#ifdef HAVE_STRUCT_DIRENT_DD_FD #define dirfd(x) ((x)->dd_fd) +#else +#error Missing dirfd() and ->dd_fd +#endif #endif ROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL tm2time (struct tm, int);