ID:               44018
 User updated by:  jordan dot raub at dataxltd dot com
 Reported By:      jordan dot raub at dataxltd dot com
-Status:           Feedback
+Status:           Open
 Bug Type:         SPL related
 Operating System: *
 PHP Version:      5.3.0alpha2
 Assigned To:      colder
 New Comment:

The bug was reintroduced.

$obj = new RecursiveDirectoryIterator(dirname(__FILE__), 0);
$obj->current(); //should return a RecursiveDirectoryIterator

$obj = new RecursiveDirectoryIterator(dirname(__FILE__));
$obj->current(); //should return a RecursiveDirectoryIterator

both of these return SplFileObjects.

So it looks like CURRENT_AS_FILEINFO and CURRENT_AS_SELF should be
switched. CURRENT_AS_SELF === 0?


Previous Comments:
------------------------------------------------------------------------

[2008-10-08 19:41:22] [EMAIL PROTECTED]

Using a test script testing some possibilities, I get such results:

Format is ($options) $key => type($val) when foreach'ing a
RecursiveDirectoryIterator with the following options.

Default:
 () /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = 0:
 (0) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = CURRENT_AS_FILEINFO:
 (0) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = CURRENT_AS_SELF:
 (16) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg
=>RecursiveDirectoryIterator
Options = CURRENT_AS_PATHNAME:
 (32) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>(string)
/home/colder/cvs/php5.2/ext/spl/doxygen.cfg
Options = KEY_AS_FILENAME:
 (256) doxygen.cfg =>SplFileInfo
Options = KEY_AS_FILENAME|CURRENT_AS_FILEINFO:
 (256) doxygen.cfg =>SplFileInfo
Options = NEW_CURRENT_AND_KEY:
 (256) doxygen.cfg =>SplFileInfo
Options = KEY_MODE_MASK:
 (3840) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo

This is consistent across 5.2, 5.3 and HEAD, and looks consistent to
me.

Where is the actual problem? Is it a regression? Documentation problem?

------------------------------------------------------------------------

[2008-10-08 18:17:26] [EMAIL PROTECTED]

Assigned to the maintainer..

------------------------------------------------------------------------

[2008-10-03 16:32:10] jordan dot raub at dataxltd dot com

this also got reintroduced to 5.3, tests fail w/ 5.3alpha2

------------------------------------------------------------------------

[2008-09-30 22:18:50] jordan dot raub at dataxltd dot com

patch....

diff php5.2-200809302030/ext/spl/spl_directory.c
php52/ext/spl/spl_directory.c
683,686c683
<       } else if (SPL_FILE_DIR_CURRENT(intern,
SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
<               spl_filesystem_object_get_file_name(intern TSRMLS_CC);
<               spl_filesystem_object_create_type(0, intern,
SPL_FS_INFO, NULL, return_value TSRMLS_CC);
<       } else {
---
>       } else if (SPL_FILE_DIR_CURRENT(intern,
SPL_FILE_DIR_CURRENT_AS_SELF)) {
688a686,688
>       } else {
>               spl_filesystem_object_get_file_name(intern TSRMLS_CC);
>               spl_filesystem_object_create_type(0, intern,
SPL_FS_INFO, NULL, return_value TSRMLS_CC);
966c966
<       long flags =
SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO;
---
>       long flags =
SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_SELF;
1258c1258,1260
<       } else if (SPL_FILE_DIR_CURRENT(object,
SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
---
>       } else if (SPL_FILE_DIR_CURRENT(object,
SPL_FILE_DIR_CURRENT_AS_SELF)) {
>               *data = (zval**)&iterator->intern.data;
>       } else {
1265,1266d1266
<       } else {
<               *data = (zval**)&iterator->intern.data;
diff php5.2-200809302030/ext/spl/spl_directory.h
php52/ext/spl/spl_directory.h
96,97c96,97
< #define SPL_FILE_DIR_CURRENT_AS_FILEINFO   0x00000000 /* make
RecursiveDirectoryTree::current() return SplFileInfo */
< #define SPL_FILE_DIR_CURRENT_AS_SELF       0x00000010 /* make
RecursiveDirectoryTree::current() return getSelf() */
---
> #define SPL_FILE_DIR_CURRENT_AS_FILEINFO   0x00000010 /* make
RecursiveDirectoryTree::current() return SplFileInfo */
> #define SPL_FILE_DIR_CURRENT_AS_SELF       0x00000000 /* make
RecursiveDirectoryTree::current() return getSelf() */



UnitTest
--TEST--
Bug #44018 (RecursiveDirectoryIterator options inconsistancy)
--FILE--
<?php
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__))) as
$key => $file)
{
    if(strpos($key, '/tests') !== false)
    {
        echo get_class($file) . "\n";
    }
}

$options = 0;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
    if(strpos($key, '/tests') !== false)
    {
        echo get_class($file) . "\n";
    }
}

$options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
    if(strpos($key, '/tests') !== false)
    {
        echo get_class($file) . "\n";
    }
}

$options = RecursiveDirectoryIterator::KEY_AS_FILENAME;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
    if('tests' === $key)
    {
        echo get_class($file) . "\n";
    }
}

$options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO
  | RecursiveDirectoryIterator::KEY_AS_FILENAME;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
    if('tests' === $key)
    {
        echo get_class($file) . "\n";
    }
}
?>
--EXPECTF--
RecursiveDirectoryIterator
RecursiveDirectoryIterator
SplFileInfo
RecursiveDirectoryIterator
SplFileInfo

------------------------------------------------------------------------

[2008-09-30 21:32:34] jordan dot raub at dataxltd dot com

re-opened

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/44018

-- 
Edit this bug report at http://bugs.php.net/?id=44018&edit=1

Reply via email to