[PHP-CVS] cvs: php-src /ext/standard dir.c /main php_streams.h /main/streams streams.c

2005-02-21 Thread Ilia Alshanetsky
iliaa   Mon Feb 21 19:24:13 2005 EDT

  Modified files:  
/php-src/main   php_streams.h 
/php-src/main/streams   streams.c 
/php-src/ext/standard   dir.c 
  Log:
  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.100r2=1.101ty=u
Index: php-src/main/php_streams.h
diff -u php-src/main/php_streams.h:1.100 php-src/main/php_streams.h:1.101
--- php-src/main/php_streams.h:1.100Sun Feb  6 18:17:09 2005
+++ php-src/main/php_streams.h  Mon Feb 21 19:24:13 2005
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: php_streams.h,v 1.100 2005/02/06 23:17:09 wez Exp $ */
+/* $Id: php_streams.h,v 1.101 2005/02/22 00:24:13 iliaa Exp $ */
 
 #ifndef PHP_STREAMS_H
 #define PHP_STREAMS_H
@@ -328,11 +328,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.70r2=1.71ty=u
Index: php-src/main/streams/streams.c
diff -u php-src/main/streams/streams.c:1.70 php-src/main/streams/streams.c:1.71
--- php-src/main/streams/streams.c:1.70 Mon Nov 15 18:43:12 2004
+++ php-src/main/streams/streams.c  Mon Feb 21 19:24:13 2005
@@ -19,7 +19,7 @@
+--+
  */
 
-/* $Id: streams.c,v 1.70 2004/11/15 23:43:12 iliaa Exp $ */
+/* $Id: streams.c,v 1.71 2005/02/22 00:24:13 iliaa Exp $ */
 
 #define _GNU_SOURCE
 #include php.h
@@ -1944,28 +1944,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;
 
@@ -1985,11 +1985,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++;
}
@@ -1998,7 +1997,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.141r2=1.142ty=u
Index: php-src/ext/standard/dir.c
diff -u 

[PHP-CVS] cvs: php-src /ext/standard dir.c /main php_streams.h /main/streams streams.c

2004-01-28 Thread Sara Golemon
pollita Wed Jan 28 17:21:55 2004 EDT

  Modified files:  
/php-src/ext/standard   dir.c 
/php-src/main   php_streams.h 
/php-src/main/streams   streams.c 
  Log:
  'Bug Fix': scandir, being a new function in PHP5 should have always been wrapper 
aware.
  
http://cvs.php.net/diff.php/php-src/ext/standard/dir.c?r1=1.132r2=1.133ty=u
Index: php-src/ext/standard/dir.c
diff -u php-src/ext/standard/dir.c:1.132 php-src/ext/standard/dir.c:1.133
--- php-src/ext/standard/dir.c:1.132Thu Jan  8 03:17:31 2004
+++ php-src/ext/standard/dir.c  Wed Jan 28 17:21:53 2004
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: dir.c,v 1.132 2004/01/08 08:17:31 andi Exp $ */
+/* $Id: dir.c,v 1.133 2004/01/28 22:21:53 pollita Exp $ */
 
 /* {{{ includes/startup/misc */
 
@@ -444,74 +444,45 @@
 /* }}} */
 #endif 
 
-/* {{{ php_alphasortr
-*/
-static int php_alphasortr(const struct dirent **a, const struct dirent **b)
-{
-   return strcoll((*b)-d_name, (*a)-d_name);
-}
-/* }}} */
-
-/* {{{ proto array scandir(string dir [, int sorting_order])
+/* {{{ proto array scandir(string dir [, int sorting_order [, resource context]])
List files  directories inside the specified path */
 PHP_FUNCTION(scandir)
 {
char *dirn;
int dirn_len;
int flags = 0;
-   char *path;
-   struct dirent **namelist;
+   php_stream_dirent **namelist;
int n, i;
+   zval *zcontext = NULL;
+   php_stream_context *context = NULL;
 
-   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s|l, dirn, dirn_len, 
flags) == FAILURE) {
+   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, s|lr, dirn, dirn_len, 
flags, zcontext) == FAILURE) {
return;
}
 
-#ifdef ZTS
-   if (!IS_ABSOLUTE_PATH(dirn, dirn_len)) {
-   path = expand_filepath(dirn, NULL TSRMLS_CC);
-   } else 
-#endif
-   path = dirn;
-
-   if (PG(safe_mode)  (!php_checkuid(path, NULL, CHECKUID_CHECK_FILE_AND_DIR))) 
{
-   RETVAL_FALSE;
-   goto err;
-   }
-   if (php_check_open_basedir(path TSRMLS_CC)) {
-   RETVAL_FALSE;
-   goto err;
+   if (zcontext) {
+   context = php_stream_context_from_zval(zcontext, 0);
}
 
if (!flags) {
-   n = php_scandir(path, namelist, 0, php_alphasort);
+   n = php_stream_scandir(dirn, namelist, context, (void *) 
php_stream_dirent_alphasort);
} else {
-   n = php_scandir(path, namelist, 0, (void *) php_alphasortr);
+   n = php_stream_scandir(dirn, namelist, context, (void *) 
php_stream_dirent_alphasortr);
}
-
if (n  0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, (errno %d): %s, errno, 
strerror(errno));
-   RETVAL_FALSE;
-   goto err;
+   RETURN_FALSE;
}

array_init(return_value);
 
for (i = 0; i  n; i++) {
-   add_next_index_string(return_value, namelist[i]-d_name, 1);
-   free(namelist[i]);
+   add_next_index_string(return_value, namelist[i]-d_name, 0);
}
 
if (n) {
-   free(namelist);
+   efree(namelist);
}
-
-err:
-   if (path  path != dirn) {
-   efree(path);
-   }
-
-   return;
 }
 /* }}} */
 
http://cvs.php.net/diff.php/php-src/main/php_streams.h?r1=1.91r2=1.92ty=u
Index: php-src/main/php_streams.h
diff -u php-src/main/php_streams.h:1.91 php-src/main/php_streams.h:1.92
--- php-src/main/php_streams.h:1.91 Thu Jan  8 12:33:04 2004
+++ php-src/main/php_streams.h  Wed Jan 28 17:21:53 2004
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: php_streams.h,v 1.91 2004/01/08 17:33:04 sniper Exp $ */
+/* $Id: php_streams.h,v 1.92 2004/01/28 22:21:53 pollita Exp $ */
 
 #ifndef PHP_STREAMS_H
 #define PHP_STREAMS_H
@@ -325,6 +325,13 @@
 #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_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);
+#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);
 #define php_stream_set_option(stream, option, value, ptrvalue)