]> granicus.if.org Git - php/commitdiff
Support old-style readdir_r()
authorSascha Schumann <sas@php.net>
Wed, 24 May 2000 11:06:57 +0000 (11:06 +0000)
committerSascha Schumann <sas@php.net>
Wed, 24 May 2000 11:06:57 +0000 (11:06 +0000)
acinclude.m4
configure.in
main/reentrancy.c

index bb2ca1baf05f442d41a60a8819e8f75d134aed65..6d7bf111995ce00df291fa51964128d168993731 100644 (file)
@@ -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 <sys/types.h>
 #include <dirent.h>
 
@@ -24,13 +27,26 @@ main() {
     ],[
       ac_cv_what_readdir_r=POSIX
     ],[
-      ac_cv_what_readdir_r=none
+      AC_TRY_CPP([
+#define _REENTRANT
+#include <sys/types.h>
+#include <dirent.h>
+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
 ])
 
index 4ed1a52d1785a5410fbcc4e7f3c0287af538c99f..c2b79db30f4e50ee083fa372f6424ed78ccc3b74 100644 (file)
@@ -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)
index d9dd97fec87a56e6cd67dd0f2d78e0d21e5ba586..c180a5af2b6e2fe809e5e69e896431bc98b1c27b 100644 (file)
@@ -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