summaryrefslogtreecommitdiff
path: root/configure.in
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2019-03-26 08:35:35 +0000
committerYann Ylavic <ylavic@apache.org>2019-03-26 08:35:35 +0000
commitd2fd4f44260443b3168a97090a35eb998e498444 (patch)
treebf6ed46a874e45f0e7497056905f3b5a3221072f /configure.in
parente1a804b4e6ae721098fc1af384fe971b9b258694 (diff)
downloadapr-d2fd4f44260443b3168a97090a35eb998e498444.tar.gz
Merge r1789258, r1856189, r1856191, r1856192, r1856196 from trunk:
apr_dir_read: Since readdir() is now thread safe on most (if not all) unixes and readdir_r() is defective and deprecated, use the former by default unless APR_USE_READDIR_R is defined (no use case currently hence not autoconfigured). Follow up to r1789258: configure to detect whether readdir() is thread-safe. On platforms where readdir_r() is available but deprecated, readdir() is to be used although it's not in libc_r (e.g. Linux has no libc_r). In this case we can APR_TRY_COMPILE_NO_WARNING readdir_r() and, if it's deprecated, define READDIR_IS_THREAD_SAFE. With this we don't need user-defined APR_USE_READDIR{,64}_R from r1789258. Follow up to r1856189: sys/types.h possibly needed. Follow up to r1856189: use NAME_MAX from limits.h when available. apr_dir: no need to allocate our dir entry if readdir{,64}_r() is not used. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.7.x@1856274 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'configure.in')
-rw-r--r--configure.in25
1 files changed, 24 insertions, 1 deletions
diff --git a/configure.in b/configure.in
index 64467d2eb..4bbfb618c 100644
--- a/configure.in
+++ b/configure.in
@@ -817,8 +817,31 @@ ac_cv_define_GETSERVBYNAME_IS_THREAD_SAFE=no
if test "$threads" = "1"; then
echo "APR will use threads"
AC_CHECK_LIB(c_r, readdir,
+ apr_readdir_is_thread_safe=yes)
+ if test "x$apr_readdir_is_thread_safe" = "x"; then
+ AC_CHECK_HEADERS(dirent.h)
+ AC_CHECK_FUNCS(readdir_r)
+ APR_IFALLYES(header:dirent.h func:readdir_r,
+ apr_has_readdir_r="1", apr_has_readdir_r="0")
+ if test "$apr_has_readdir_r" = "1"; then
+ dnl readdir_r() may exist but be deprecated, meaning
+ dnl the readdir() itself is thread-safe
+ APR_TRY_COMPILE_NO_WARNING([
+ #include <sys/types.h>
+ #include <dirent.h>
+ ],
+ [
+ DIR *dir = opendir("/tmp");
+ struct dirent entry, *result;
+ return readdir_r(dir, &entry, &result) != 0;
+ ], apr_readdir_is_thread_safe=no, apr_readdir_is_thread_safe=yes)
+ fi
+ fi
+ if test "$apr_readdir_is_thread_safe" = "yes"; then
+ AC_MSG_NOTICE([APR will use thread-safe readdir()])
AC_DEFINE(READDIR_IS_THREAD_SAFE, 1,
- [Define if readdir is thread safe]))
+ [Define if readdir is thread safe])
+ fi
if test "x$apr_gethostbyname_is_thread_safe" = "x"; then
AC_CHECK_LIB(c_r, gethostbyname, apr_gethostbyname_is_thread_safe=yes)
fi