diff options
author | Yann Ylavic <ylavic@apache.org> | 2019-03-26 08:35:35 +0000 |
---|---|---|
committer | Yann Ylavic <ylavic@apache.org> | 2019-03-26 08:35:35 +0000 |
commit | d2fd4f44260443b3168a97090a35eb998e498444 (patch) | |
tree | bf6ed46a874e45f0e7497056905f3b5a3221072f /configure.in | |
parent | e1a804b4e6ae721098fc1af384fe971b9b258694 (diff) | |
download | apr-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.in | 25 |
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 |