iliaa Mon Feb 21 19:24:51 2005 EDT Modified files: (Branch: PHP_5_0) /php-src/main php_streams.h /php-src/main/streams streams.c /php-src/ext/standard dir.c /php-src NEWS Log: MFH: Fixed bug #31515 (Improve performance of scandir() by factor of 10 or so). http://cvs.php.net/diff.php/php-src/main/php_streams.h?r1=1.95.2.1&r2=1.95.2.2&ty=u Index: php-src/main/php_streams.h diff -u php-src/main/php_streams.h:1.95.2.1 php-src/main/php_streams.h:1.95.2.2 --- php-src/main/php_streams.h:1.95.2.1 Mon Nov 15 18:44:14 2004 +++ php-src/main/php_streams.h Mon Feb 21 19:24:50 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_streams.h,v 1.95.2.1 2004/11/15 23:44:14 iliaa Exp $ */ +/* $Id: php_streams.h,v 1.95.2.2 2005/02/22 00:24:50 iliaa Exp $ */ #ifndef PHP_STREAMS_H #define PHP_STREAMS_H @@ -331,11 +331,11 @@ #define php_stream_closedir(dirstream) php_stream_close((dirstream)) #define php_stream_rewinddir(dirstream) php_stream_rewind((dirstream)) -PHPAPI int php_stream_dirent_alphasort(const php_stream_dirent **a, const php_stream_dirent **b); -PHPAPI int php_stream_dirent_alphasortr(const php_stream_dirent **a, const php_stream_dirent **b); +PHPAPI int php_stream_dirent_alphasort(const char **a, const char **b); +PHPAPI int php_stream_dirent_alphasortr(const char **a, const char **b); -PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], int flags, php_stream_context *context, - int (*compare) (const php_stream_dirent **a, const php_stream_dirent **b) TSRMLS_DC); +PHPAPI int _php_stream_scandir(char *dirname, char **namelist[], int flags, php_stream_context *context, + int (*compare) (const char **a, const char **b) TSRMLS_DC); #define php_stream_scandir(dirname, namelist, context, compare) _php_stream_scandir((dirname), (namelist), 0, (context), (compare) TSRMLS_CC) PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC); http://cvs.php.net/diff.php/php-src/main/streams/streams.c?r1=1.61.2.5&r2=1.61.2.6&ty=u Index: php-src/main/streams/streams.c diff -u php-src/main/streams/streams.c:1.61.2.5 php-src/main/streams/streams.c:1.61.2.6 --- php-src/main/streams/streams.c:1.61.2.5 Mon Nov 15 18:44:14 2004 +++ php-src/main/streams/streams.c Mon Feb 21 19:24:51 2005 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streams.c,v 1.61.2.5 2004/11/15 23:44:14 iliaa Exp $ */ +/* $Id: streams.c,v 1.61.2.6 2005/02/22 00:24:51 iliaa Exp $ */ #define _GNU_SOURCE #include "php.h" @@ -1883,28 +1883,28 @@ /* {{{ php_stream_dirent_alphasort */ -PHPAPI int php_stream_dirent_alphasort(const php_stream_dirent **a, const php_stream_dirent **b) +PHPAPI int php_stream_dirent_alphasort(const char **a, const char **b) { - return strcoll((*a)->d_name,(*b)->d_name); + return strcoll(*a, *b); } /* }}} */ /* {{{ php_stream_dirent_alphasortr */ -PHPAPI int php_stream_dirent_alphasortr(const php_stream_dirent **a, const php_stream_dirent **b) +PHPAPI int php_stream_dirent_alphasortr(const char **a, const char **b) { - return strcoll((*b)->d_name,(*a)->d_name); + return strcoll(*b, *a); } /* }}} */ /* {{{ php_stream_scandir */ -PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], int flags, php_stream_context *context, - int (*compare) (const php_stream_dirent **a, const php_stream_dirent **b) TSRMLS_DC) +PHPAPI int _php_stream_scandir(char *dirname, char **namelist[], int flags, php_stream_context *context, + int (*compare) (const char **a, const char **b) TSRMLS_DC) { php_stream *stream; php_stream_dirent sdp; - php_stream_dirent **vector = NULL; + char **vector = NULL; int vector_size = 0; int nfiles = 0; @@ -1924,11 +1924,10 @@ } else { vector_size *= 2; } - vector = (php_stream_dirent **) erealloc(vector, vector_size * sizeof(php_stream_dirent *)); + vector = (char **) erealloc(vector, vector_size * sizeof(char *)); } - vector[nfiles] = emalloc(sizeof(php_stream_dirent)); - memcpy(vector[nfiles], &sdp, sizeof(sdp)); + vector[nfiles] = estrdup(sdp.d_name); nfiles++; } @@ -1937,7 +1936,7 @@ *namelist = vector; if (compare) { - qsort(*namelist, nfiles, sizeof(php_stream_dirent *), (int(*)(const void *, const void *))compare); + qsort(*namelist, nfiles, sizeof(char *), (int(*)(const void *, const void *))compare); } return nfiles; } http://cvs.php.net/diff.php/php-src/ext/standard/dir.c?r1=1.141&r2=1.141.2.1&ty=u Index: php-src/ext/standard/dir.c diff -u php-src/ext/standard/dir.c:1.141 php-src/ext/standard/dir.c:1.141.2.1 --- php-src/ext/standard/dir.c:1.141 Wed Jun 16 19:57:25 2004 +++ php-src/ext/standard/dir.c Mon Feb 21 19:24:51 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dir.c,v 1.141 2004/06/16 23:57:25 abies Exp $ */ +/* $Id: dir.c,v 1.141.2.1 2005/02/22 00:24:51 iliaa Exp $ */ /* {{{ includes/startup/misc */ @@ -488,7 +488,7 @@ array_init(return_value); for (i = 0; i < n; i++) { - add_next_index_string(return_value, namelist[i]->d_name, 0); + add_next_index_string(return_value, namelist[i], 0); } if (n) { http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1760.2.255&r2=1.1760.2.256&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.1760.2.255 php-src/NEWS:1.1760.2.256 --- php-src/NEWS:1.1760.2.255 Mon Feb 21 05:20:23 2005 +++ php-src/NEWS Mon Feb 21 19:24:51 2005 @@ -57,6 +57,7 @@ (daniel dot beet at accuratesoftware dot com, Tony) - Fixed bug #31527 (crash in msg_send() when non-string is stored without being serialized). (Ilia) +- Fixed bug #31515 (Improve performance of scandir() by factor of 10 or so). (Ilia) - Fixed bug #31514 (open_basedir uses path_translated rather then cwd for . translation). (Ilia) - Fixed bug #31480 (Possible infinite loop in imap_mail_compose()). (Ilia)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php