diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/dir.c | 8 | ||||
-rw-r--r-- | ext/standard/php_dir.h | 4 | ||||
-rw-r--r-- | ext/standard/tests/dir/scandir_basic.phpt | 2 | ||||
-rw-r--r-- | ext/standard/tests/dir/scandir_variation10.phpt | 79 | ||||
-rw-r--r-- | ext/standard/tests/dir/scandir_variation3.phpt | 2 |
5 files changed, 92 insertions, 3 deletions
diff --git a/ext/standard/dir.c b/ext/standard/dir.c index a788706a34..f572e2ff32 100644 --- a/ext/standard/dir.c +++ b/ext/standard/dir.c @@ -148,6 +148,10 @@ PHP_MINIT_FUNCTION(dir) pathsep_str[1] = '\0'; REGISTER_STRING_CONSTANT("PATH_SEPARATOR", pathsep_str, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SCANDIR_SORT_ASCENDING", PHP_SCANDIR_SORT_ASCENDING, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SCANDIR_SORT_DESCENDING", PHP_SCANDIR_SORT_DESCENDING, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SCANDIR_SORT_NONE", PHP_SCANDIR_SORT_NONE, CONST_CS | CONST_PERSISTENT); + #ifdef HAVE_GLOB #ifdef GLOB_BRACE @@ -563,8 +567,10 @@ PHP_FUNCTION(scandir) context = php_stream_context_from_zval(zcontext, 0); } - if (!flags) { + if (flags == PHP_SCANDIR_SORT_ASCENDING) { n = php_stream_scandir(dirn, &namelist, context, (void *) php_stream_dirent_alphasort); + } else if (flags == PHP_SCANDIR_SORT_NONE) { + n = php_stream_scandir(dirn, &namelist, context, NULL); } else { n = php_stream_scandir(dirn, &namelist, context, (void *) php_stream_dirent_alphasortr); } diff --git a/ext/standard/php_dir.h b/ext/standard/php_dir.h index 157480d328..63b7a9b860 100644 --- a/ext/standard/php_dir.h +++ b/ext/standard/php_dir.h @@ -37,4 +37,8 @@ PHP_FUNCTION(getdir); PHP_FUNCTION(glob); PHP_FUNCTION(scandir); +#define PHP_SCANDIR_SORT_ASCENDING 0 +#define PHP_SCANDIR_SORT_DESCENDING 1 +#define PHP_SCANDIR_SORT_NONE 2 + #endif /* PHP_DIR_H */ diff --git a/ext/standard/tests/dir/scandir_basic.phpt b/ext/standard/tests/dir/scandir_basic.phpt index 25700a7a4f..7a044da529 100644 --- a/ext/standard/tests/dir/scandir_basic.phpt +++ b/ext/standard/tests/dir/scandir_basic.phpt @@ -25,7 +25,7 @@ echo "\n-- scandir() with mandatory arguments --\n"; var_dump(scandir($directory)); echo "\n-- scandir() with all arguments --\n"; -$sorting_order = 1; +$sorting_order = SCANDIR_SORT_DESCENDING; $context = stream_context_create(); var_dump(scandir($directory, $sorting_order, $context)); diff --git a/ext/standard/tests/dir/scandir_variation10.phpt b/ext/standard/tests/dir/scandir_variation10.phpt new file mode 100644 index 0000000000..412836b2ba --- /dev/null +++ b/ext/standard/tests/dir/scandir_variation10.phpt @@ -0,0 +1,79 @@ +--TEST-- +Test scandir() function : usage variations - different sorting constants +--FILE-- +<?php +/* Prototype : array scandir(string $dir [, int $sorting_order [, resource $context]]) + * Description: List files & directories inside the specified path + * Source code: ext/standard/dir.c + */ + +printf("SCANDIR_SORT_ASCENDING: %d\n", SCANDIR_SORT_ASCENDING); +printf("SCANDIR_SORT_DESCENDING: %d\n", SCANDIR_SORT_DESCENDING); +printf("SCANDIR_SORT_NONE: %d\n", SCANDIR_SORT_NONE); + +/* + * Pass different integers as $sorting_order argument to test how scandir() + * re-orders the array + */ + +echo "*** Testing scandir() : usage variations ***\n"; + +// include for create_files/delete_files functions +include(dirname(__FILE__) . '/../file/file.inc'); + +// create directory and files +$dir = dirname(__FILE__) . '/scandir_variation10'; +mkdir($dir); +@create_files($dir, 2); + +// Deterministic tests. +var_dump(scandir($dir, SCANDIR_SORT_ASCENDING)); +var_dump(scandir($dir, SCANDIR_SORT_DESCENDING)); + +// Non-deterministic tests. +$files = scandir($dir, SCANDIR_SORT_NONE); +var_dump(count($files)); +var_dump(in_array('.', $files)); +var_dump(in_array('..', $files)); +var_dump(in_array('file1.tmp', $files)); +var_dump(in_array('file2.tmp', $files)); + +delete_files($dir, 2); +?> +===DONE=== +--CLEAN-- +<?php +$dir = dirname(__FILE__) . '/scandir_variation10'; +rmdir($dir); +?> +--EXPECTF-- +SCANDIR_SORT_ASCENDING: 0 +SCANDIR_SORT_DESCENDING: 1 +SCANDIR_SORT_NONE: 2 +*** Testing scandir() : usage variations *** +array(4) { + [0]=> + string(1) "." + [1]=> + string(2) ".." + [2]=> + string(9) "file1.tmp" + [3]=> + string(9) "file2.tmp" +} +array(4) { + [0]=> + string(9) "file2.tmp" + [1]=> + string(9) "file1.tmp" + [2]=> + string(2) ".." + [3]=> + string(1) "." +} +int(4) +bool(true) +bool(true) +bool(true) +bool(true) +===DONE=== diff --git a/ext/standard/tests/dir/scandir_variation3.phpt b/ext/standard/tests/dir/scandir_variation3.phpt index 8e23faf2d4..58da5e2c53 100644 --- a/ext/standard/tests/dir/scandir_variation3.phpt +++ b/ext/standard/tests/dir/scandir_variation3.phpt @@ -16,7 +16,7 @@ echo "*** Testing scandir() : usage variations ***\n"; // Initialise function arguments not being substituted $dir = dirname(__FILE__) . '/scandir_variation3'; mkdir($dir); -$sorting_order = 0; +$sorting_order = SCANDIR_SORT_ASCENDING; //get an unset variable $unset_var = 10; |