mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: Updated NEWS SPL: Fix for bug 66405 RecursiveDirectoryIterator with CURRENT_AS_PATHNAME
This commit is contained in:
commit
a93fb3524e
@ -1523,29 +1523,25 @@ SPL_METHOD(RecursiveDirectoryIterator, getChildren)
|
||||
|
||||
spl_filesystem_object_get_file_name(intern TSRMLS_CC);
|
||||
|
||||
if (SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_CURRENT_AS_PATHNAME)) {
|
||||
RETURN_STRINGL(intern->file_name, intern->file_name_len, 1);
|
||||
} else {
|
||||
MAKE_STD_ZVAL(zflags);
|
||||
MAKE_STD_ZVAL(zpath);
|
||||
ZVAL_LONG(zflags, intern->flags);
|
||||
ZVAL_STRINGL(zpath, intern->file_name, intern->file_name_len, 1);
|
||||
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), &return_value, 0, zpath, zflags TSRMLS_CC);
|
||||
zval_ptr_dtor(&zpath);
|
||||
zval_ptr_dtor(&zflags);
|
||||
|
||||
subdir = (spl_filesystem_object*)zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
if (subdir) {
|
||||
if (intern->u.dir.sub_path && intern->u.dir.sub_path[0]) {
|
||||
subdir->u.dir.sub_path_len = spprintf(&subdir->u.dir.sub_path, 0, "%s%c%s", intern->u.dir.sub_path, slash, intern->u.dir.entry.d_name);
|
||||
} else {
|
||||
subdir->u.dir.sub_path_len = strlen(intern->u.dir.entry.d_name);
|
||||
subdir->u.dir.sub_path = estrndup(intern->u.dir.entry.d_name, subdir->u.dir.sub_path_len);
|
||||
}
|
||||
subdir->info_class = intern->info_class;
|
||||
subdir->file_class = intern->file_class;
|
||||
subdir->oth = intern->oth;
|
||||
MAKE_STD_ZVAL(zflags);
|
||||
MAKE_STD_ZVAL(zpath);
|
||||
ZVAL_LONG(zflags, intern->flags);
|
||||
ZVAL_STRINGL(zpath, intern->file_name, intern->file_name_len, 1);
|
||||
spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), &return_value, 0, zpath, zflags TSRMLS_CC);
|
||||
zval_ptr_dtor(&zpath);
|
||||
zval_ptr_dtor(&zflags);
|
||||
|
||||
subdir = (spl_filesystem_object*)zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
if (subdir) {
|
||||
if (intern->u.dir.sub_path && intern->u.dir.sub_path[0]) {
|
||||
subdir->u.dir.sub_path_len = spprintf(&subdir->u.dir.sub_path, 0, "%s%c%s", intern->u.dir.sub_path, slash, intern->u.dir.entry.d_name);
|
||||
} else {
|
||||
subdir->u.dir.sub_path_len = strlen(intern->u.dir.entry.d_name);
|
||||
subdir->u.dir.sub_path = estrndup(intern->u.dir.entry.d_name, subdir->u.dir.sub_path_len);
|
||||
}
|
||||
subdir->info_class = intern->info_class;
|
||||
subdir->file_class = intern->file_class;
|
||||
subdir->oth = intern->oth;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
59
ext/spl/tests/bug66405.phpt
Normal file
59
ext/spl/tests/bug66405.phpt
Normal file
@ -0,0 +1,59 @@
|
||||
--TEST--
|
||||
SPL: RecursiveDirectoryIterator with CURRENT_AS_PATHNAME flag
|
||||
--CREDITS--
|
||||
Paul Garvin pgarvin76@gmail.com
|
||||
--FILE--
|
||||
<?php
|
||||
$td = __DIR__ . '/bug66405';
|
||||
mkdir($td);
|
||||
touch($td . '/file1.txt');
|
||||
touch($td . '/file2.md');
|
||||
mkdir($td . '/testsubdir');
|
||||
touch($td . '/testsubdir/file3.csv');
|
||||
|
||||
class Bug66405 extends RecursiveDirectoryIterator
|
||||
{
|
||||
public function current()
|
||||
{
|
||||
$current = parent::current();
|
||||
echo gettype($current) . " $current\n";
|
||||
return $current;
|
||||
}
|
||||
|
||||
public function getChildren()
|
||||
{
|
||||
$children = parent::getChildren();
|
||||
if (is_object($children)) {
|
||||
echo get_class($children) . " $children\n";
|
||||
} else {
|
||||
echo gettype($children) . " $children\n";
|
||||
}
|
||||
return $children;
|
||||
}
|
||||
}
|
||||
|
||||
$rdi = new Bug66405($td, FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS);
|
||||
$rii = new RecursiveIteratorIterator($rdi);
|
||||
|
||||
ob_start();
|
||||
foreach ($rii as $file) {
|
||||
//noop
|
||||
}
|
||||
$results = explode("\n", ob_get_clean());
|
||||
sort($results);
|
||||
echo implode("\n", $results);
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
$td = __DIR__ . '/bug66405';
|
||||
unlink($td . '/testsubdir/file3.csv');
|
||||
unlink($td . '/file2.md');
|
||||
unlink($td . '/file1.txt');
|
||||
rmdir($td . '/testsubdir');
|
||||
rmdir($td);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Bug66405 file3.csv
|
||||
string %s/bug66405/file1.txt
|
||||
string %s/bug66405/file2.md
|
||||
string %s/bug66405/testsubdir/file3.csv
|
Loading…
Reference in New Issue
Block a user