From: Sascha Schumann Date: Wed, 24 May 2000 11:06:57 +0000 (+0000) Subject: Support old-style readdir_r() X-Git-Tag: PRE_EIGHT_BYTE_ALLOC_PATCH~271 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=25df65b0b8b5105159410c1c3cf0a08449353975;p=php Support old-style readdir_r() --- diff --git a/acinclude.m4 b/acinclude.m4 index bb2ca1baf0..6d7bf11199 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -4,9 +4,12 @@ dnl This file contains local autoconf functions. sinclude(dynlib.m4) -AC_DEFUN(PHP_POSIX_READDIR_R,[ +AC_DEFUN(PHP_READDIR_R_TYPE,[ + AC_CHECK_FUNCS(readdir_r) + if test "$ac_cv_func_readdir_r" = "yes"; then AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[ AC_TRY_RUN([ +#define _REENTRANT #include #include @@ -24,13 +27,26 @@ main() { ],[ ac_cv_what_readdir_r=POSIX ],[ - ac_cv_what_readdir_r=none + AC_TRY_CPP([ +#define _REENTRANT +#include +#include +int readdir_r(DIR *, struct dirent *); + ],[ + ac_cv_what_readdir_r=old-style + ],[ + ac_cv_what_readdir_r=none + ]) ],[ ac_cv_what_readdir_r=none ]) ]) - if test "$ac_cv_what_readdir_r" = "POSIX"; then - AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]) + case "$ac_cv_what_readdir_r" in + POSIX) + AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);; + old-style) + AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);; + esac fi ]) diff --git a/configure.in b/configure.in index 4ed1a52d17..c2b79db30f 100644 --- a/configure.in +++ b/configure.in @@ -379,7 +379,7 @@ AC_FUNC_ALLOCA AC_BROKEN_SPRINTF PHP_DECLARED_TIMEZONE PHP_TIME_R_TYPE -PHP_POSIX_READDIR_R +PHP_READDIR_R_TYPE dnl AIX keeps in_addr_t in /usr/include/netinet/in.h dnl AC_MSG_CHECKING(for in_addr_t) diff --git a/main/reentrancy.c b/main/reentrancy.c index d9dd97fec8..c180a5af2b 100644 --- a/main/reentrancy.c +++ b/main/reentrancy.c @@ -99,6 +99,20 @@ PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm) PHPAPI int php_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) { +#if defined(HAVE_OLD_READDIR_R) + int ret; + + errno = 0; + + ret = readdir_r(dirp, entry); + + if (ret == 0) + *result = entry; + else + *result = NULL; + + return ret; +#else struct dirent *ptr; int ret = 0; @@ -120,6 +134,7 @@ PHPAPI int php_readdir_r(DIR *dirp, struct dirent *entry, local_unlock(READDIR_R); return ret; +#endif } #endif