]> granicus.if.org Git - php/commitdiff
Fixed bug #31515 (Improve performance of scandir() by factor of 10 or so).
authorIlia Alshanetsky <iliaa@php.net>
Tue, 22 Feb 2005 00:24:13 +0000 (00:24 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 22 Feb 2005 00:24:13 +0000 (00:24 +0000)
ext/standard/dir.c
main/php_streams.h
main/streams/streams.c

index 2ee0ed71122bafc7ed7df965175b8910fb8f9a6e..e60dcb0aaf7b55796844e68cbe39c5098e283793 100644 (file)
@@ -488,7 +488,7 @@ PHP_FUNCTION(scandir)
        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) {
index 36a022141c9a42cd3afbfed9874539afee769d5b..10fc248a00fdc336287afe491b1b283b13dfb2bc 100755 (executable)
@@ -328,11 +328,11 @@ PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_
 #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);
index 7d2700e08ccd3221cdb264fe098745f80d1fe593..066662c9b6eeda34c4de8033f9c3ec35e67ca193 100755 (executable)
@@ -1944,28 +1944,28 @@ PHPAPI int php_stream_context_del_link(php_stream_context *context,
 
 /* {{{ 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;
 
@@ -1985,11 +1985,10 @@ PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], in
                        } 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++;
        }
@@ -1998,7 +1997,7 @@ PHPAPI int _php_stream_scandir(char *dirname, php_stream_dirent **namelist[], in
        *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;
 }