#44018 [Asn->Fbk]: RecursiveDirectoryIterator options inconsistancy

From: Date: Wed, 08 Oct 2008 19:41:23 +0000
Subject: #44018 [Asn->Fbk]: RecursiveDirectoryIterator options inconsistancy
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-129568@lists.php.net to get a copy of this message
ID: 44018 Updated by: colder@php.net Reported By: jordan dot raub at dataxltd dot com -Status: Assigned +Status: Feedback Bug Type: SPL related Operating System: * PHP Version: 5.3.0alpha2 -Assigned To: helly +Assigned To: colder New Comment: 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? Previous Comments: ------------------------------------------------------------------------ [2008-10-08 18:17:26] jani@php.net 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 ------------------------------------------------------------------------ [2008-09-30 21:32:02] jordan dot raub at dataxltd dot com Broken again... here it is from a snapshot... looks like CURRENT_AS_FILEINFO == 0 now $options not passed string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 0 string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 0 string(52) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/dir" object(SplFileInfo)#3 (0) { } string(83) "/virtualhosts/tmp/RecursiveDirectoryIteratorTest/RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 100 string(3) "dir" object(SplFileInfo)#3 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } $options = 100 string(3) "dir" object(SplFileInfo)#3 (0) { } string(34) "RecursiveDirectoryIteratorTest.php" object(SplFileInfo)#4 (0) { } ------------------------------------------------------------------------ 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

« previous php.bugs (#129568) next »