iliaa Mon Jan 27 20:51:27 2003 EDT Added files: (Branch: PHP_4_3) /php4/main php_scandir.h php_scandir.c
Modified files: /php4/main php_ini.c /php4/win32 readdir.h readdir.c php4dllts.dsp /php4 configure.in Log: MFH (scandir patch).
Index: php4/main/php_ini.c diff -u php4/main/php_ini.c:1.106.2.3 php4/main/php_ini.c:1.106.2.4 --- php4/main/php_ini.c:1.106.2.3 Sat Jan 25 20:46:40 2003 +++ php4/main/php_ini.c Mon Jan 27 20:51:25 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.106.2.3 2003/01/26 01:46:40 shane Exp $ */ +/* $Id: php_ini.c,v 1.106.2.4 2003/01/28 01:51:25 iliaa Exp $ */ /* Check CWD for php.ini */ #define INI_CHECK_CWD @@ -31,12 +31,10 @@ #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: php4/win32/readdir.h diff -u php4/win32/readdir.h:1.6.4.1 php4/win32/readdir.h:1.6.4.2 --- php4/win32/readdir.h:1.6.4.1 Sat Jan 25 20:46:40 2003 +++ php4/win32/readdir.h Mon Jan 27 20:51:26 2003 @@ -39,10 +39,5 @@ 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 */ Index: php4/win32/readdir.c diff -u php4/win32/readdir.c:1.8.4.1 php4/win32/readdir.c:1.8.4.2 --- php4/win32/readdir.c:1.8.4.1 Sat Jan 25 20:46:40 2003 +++ php4/win32/readdir.c Mon Jan 27 20:51:26 2003 @@ -141,83 +141,3 @@ 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: php4/win32/php4dllts.dsp diff -u php4/win32/php4dllts.dsp:1.87.2.4 php4/win32/php4dllts.dsp:1.87.2.5 --- php4/win32/php4dllts.dsp:1.87.2.4 Wed Jan 15 04:10:56 2003 +++ php4/win32/php4dllts.dsp Mon Jan 27 20:51:26 2003 @@ -210,6 +210,10 @@ # End Source File # Begin Source File +SOURCE=..\main\php_scandir.c +# End Source File +# Begin Source File + SOURCE=..\main\php_ticks.c # End Source File # Begin Source File @@ -339,6 +343,10 @@ # Begin Source File SOURCE=..\main\php_output.h +# End Source File +# Begin Source File + +SOURCE=..\main\php_scandir.h # End Source File # Begin Source File Index: php4/configure.in diff -u php4/configure.in:1.396.2.26 php4/configure.in:1.396.2.27 --- php4/configure.in:1.396.2.26 Mon Jan 27 07:44:56 2003 +++ php4/configure.in Mon Jan 27 20:51:26 2003 @@ -1,4 +1,4 @@ -dnl ## $Id: configure.in,v 1.396.2.26 2003/01/27 12:44:56 sniper Exp $ -*- sh -*- +dnl ## $Id: configure.in,v 1.396.2.27 2003/01/28 01:51:26 iliaa Exp $ -*- sh -*- dnl ## Process this file with autoconf to produce a configure script. divert(1) @@ -445,6 +445,7 @@ AC_FUNC_VPRINTF AC_CHECK_FUNCS( +alphasort \ asctime_r \ chroot \ ctime_r \ @@ -480,6 +481,7 @@ rand_r \ regcomp \ res_search \ +scandir \ setitimer \ setlocale \ localeconv \ @@ -1093,7 +1095,7 @@ 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: php4/main/php_scandir.h +++ php4/main/php_scandir.h #include <sys/types.h> #include "php_config.h" #ifdef HAVE_DIRENT_H # include <dirent.h> #endif #ifdef PHP_WIN32 #include "win32/readdir.h" #endif #ifndef HAVE_ALPHASORT int alphasort(const struct dirent **a, const struct dirent **b); #endif #ifndef HAVE_SCANDIR int scandir(const char *dirname, struct dirent **namelist[], int (*selector) (const struct dirent *entry), int (*compare) (const struct dirent **a, const struct dirent **b)); #endif Index: php4/main/php_scandir.c +++ php4/main/php_scandir.c /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2003 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Shane Caraveo <[EMAIL PROTECTED]> | | Ilia Alshanetsky <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ #include "php_scandir.h" #include "php_config.h" #ifndef HAVE_SCANDIR #include <sys/types.h> #ifdef HAVE_DIRENT_H #include <dirent.h> #endif #ifdef PHP_WIN32 #include "win32/readdir.h" #endif #include <stdlib.h> #include <search.h> #endif #ifndef HAVE_ALPHASORT int alphasort(const struct dirent **a, const struct dirent **b) { return strcoll((*a)->d_name,(*b)->d_name); } #endif #ifndef HAVE_SCANDIR 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; if (namelist == NULL) { return -1; } if (!(dirp = opendir(dirname))) { return -1; } while ((dp = readdir(dirp)) != NULL) { 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) { return -1; } vector = newv; } dsize = sizeof (struct dirent) + ((strlen(dp->d_name) + 1) * sizeof(char)); newdp = (struct dirent *) malloc(dsize); if (newdp == NULL) { goto fail; } vector[nfiles++] = (struct dirent *) memcpy(newdp, dp, dsize); } closedir(dirp); *namelist = vector; if (compare) { qsort (*namelist, nfiles, sizeof(struct dirent *), compare); } return nfiles; fail: while (nfiles-- > 0) { free(vector[nfiles]); } free(vector); return -1; } #endif
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php