]> granicus.if.org Git - php/commitdiff
MFH (scandir patch).
authorIlia Alshanetsky <iliaa@php.net>
Tue, 28 Jan 2003 01:51:26 +0000 (01:51 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 28 Jan 2003 01:51:26 +0000 (01:51 +0000)
configure.in
main/php_ini.c
win32/php4dllts.dsp
win32/readdir.c
win32/readdir.h

index fda74cc4ed92c5f5ab952065dee8bf66e8ac685a..e9923d2e5019055e82f96714138dd27abdc278da 100644 (file)
@@ -445,6 +445,7 @@ dnl -------------------------------------------------------------------------
 
 AC_FUNC_VPRINTF
 AC_CHECK_FUNCS(
+alphasort \
 asctime_r \
 chroot \
 ctime_r \
@@ -480,6 +481,7 @@ random \
 rand_r \
 regcomp \
 res_search \
+scandir \
 setitimer \
 setlocale \
 localeconv \
@@ -1093,7 +1095,7 @@ PHP_SUBST(install_targets)
 PHP_ADD_SOURCES(TSRM, TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c)
 
 PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \
-       safe_mode.c fopen_wrappers.c alloca.c \
+       safe_mode.c fopen_wrappers.c alloca.c  php_scandir.c \
        php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
        strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c \
        streams.c network.c php_open_temporary_file.c php_logos.c \
index 75b465456b4740c8fd2f332ffe6e233acf29c6f2..747ef5f05f874b77054619f7504ca42325ddb09c 100644 (file)
 #include "SAPI.h"
 #include "php_main.h"
 
-#ifdef PHP_WIN32
-#include "readdir.h"
-/* this makes no sence, vc6 errors if this declaration is not here */
-extern int alphasort(const struct dirent **a, const struct dirent **b);
+#if !HAVE_SCANDIR || !HAVE_ALPHASORT
+ #include "php_scandir.h"
 #else
-#include "dirent.h"
+ #include <dirent.h>
 #endif
 
 #ifndef S_ISREG
index 4bf385b85c4d96f5ca68ebb5b465e0501b57601b..2846da63c4983e50ebbc2788cf58378d95319d2d 100644 (file)
@@ -210,6 +210,10 @@ SOURCE=..\main\php_open_temporary_file.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\main\php_scandir.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\main\php_ticks.c\r
 # End Source File\r
 # Begin Source File\r
@@ -342,6 +346,10 @@ SOURCE=..\main\php_output.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\main\php_scandir.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\main\php_regex.h\r
 # End Source File\r
 # Begin Source File\r
index 78db689b294dbb6198e5b1b46e5819e3f8d092c3..e33d19bde5be274629d90685518a4748c703e348 100644 (file)
@@ -141,83 +141,3 @@ int rewinddir(DIR *dp)
 
 return 0;
 }
-
-int alphasort(const struct dirent **a, const struct dirent **b)
-{
-       return strcoll((*a)->d_name,(*b)->d_name);
-}
-
-int scandir(const char *dirname,
-                       struct dirent **namelist[],
-                       int (*selector) (const struct dirent *entry),
-                       int (*compare) (const struct dirent **a, const struct dirent **b))
-{
-       DIR *dirp = NULL;
-       struct dirent **vector = NULL;
-       struct dirent *dp = NULL;
-       int vector_size = 0;
-
-       int nfiles = 0;
-       int fail = 0;
-
-       if (namelist == NULL)
-               return -1;
-
-       dirp = opendir(dirname);
-       if (dirp == NULL)
-               return -1;
-
-       for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
-       {
-               int dsize = 0;
-               struct dirent *newdp = NULL;
-
-               if (selector && (*selector)(dp) == 0)
-                       continue;
-
-               if (nfiles == vector_size)
-               {
-                       struct dirent **newv;
-                       if (vector_size == 0)
-                               vector_size = 10;
-                       else
-                               vector_size *= 2;
-
-                       newv = (struct dirent **) realloc (vector, vector_size * sizeof (struct dirent *));
-                       if (newv == NULL)
-                       {
-                               fail = 1;
-                               break;
-                       }
-                       vector = newv;
-               }
-
-               dsize = sizeof (struct dirent) + ((strlen(dp->d_name) + 1) * sizeof(char));
-               newdp = (struct dirent *) malloc(dsize);
-
-               if (newdp == NULL)
-               {
-                       fail = 1;
-                       break;
-               }
-
-               vector[nfiles++] = (struct dirent *) memcpy(newdp, dp, dsize);
-       }
-
-       closedir(dirp);
-
-       if (fail)
-       {
-               while (nfiles-- > 0) free(vector[nfiles]);
-               free(vector);
-               return -1;
-       }
-
-
-       *namelist = vector;
-
-       if (compare)
-               qsort (*namelist,nfiles,sizeof (struct dirent *),compare);
-
-       return nfiles;
-}
index b63015355a5e25c8cfbd4a3a13e3ed9bc76e7e62..419dc95c24b05a76eec26ec56771c06caa299269 100644 (file)
@@ -39,10 +39,5 @@ struct dirent *readdir(DIR *);
 int readdir_r(DIR *, struct dirent *, struct dirent **);
 int closedir(DIR *);
 int rewinddir(DIR *);
-int scandir(const char *dirname,
-                       struct dirent **namelist[],
-                       int (*selector) (const struct dirent *entry),
-                       int (*compare) (const struct dirent **a, const struct dirent **b));
-int alphasort(const struct dirent **a, const struct dirent **b);
 
 #endif /* READDIR_H */