@@ -706,22 +706,16 @@ void spl_filesystem_object_construct(INTERNAL_FUNCTION_PARAMETERS, zend_long cto
706
706
spl_filesystem_object * intern ;
707
707
zend_string * path ;
708
708
int parsed ;
709
- zend_long flags ;
709
+ zend_long flags = ( ctor_flags & ~ DIT_CTOR_FLAGS ) ;
710
710
zend_error_handling error_handling ;
711
711
712
712
if (SPL_HAS_FLAG (ctor_flags , DIT_CTOR_FLAGS )) {
713
- flags = SPL_FILE_DIR_KEY_AS_PATHNAME |SPL_FILE_DIR_CURRENT_AS_FILEINFO ;
713
+ flags | = SPL_FILE_DIR_KEY_AS_PATHNAME |SPL_FILE_DIR_CURRENT_AS_FILEINFO ;
714
714
parsed = zend_parse_parameters (ZEND_NUM_ARGS (), "P|l" , & path , & flags );
715
715
} else {
716
- flags = SPL_FILE_DIR_KEY_AS_PATHNAME |SPL_FILE_DIR_CURRENT_AS_SELF ;
716
+ flags | = SPL_FILE_DIR_KEY_AS_PATHNAME |SPL_FILE_DIR_CURRENT_AS_SELF ;
717
717
parsed = zend_parse_parameters (ZEND_NUM_ARGS (), "P" , & path );
718
718
}
719
- if (SPL_HAS_FLAG (ctor_flags , SPL_FILE_DIR_SKIPDOTS )) {
720
- flags |= SPL_FILE_DIR_SKIPDOTS ;
721
- }
722
- if (SPL_HAS_FLAG (ctor_flags , SPL_FILE_DIR_UNIXPATHS )) {
723
- flags |= SPL_FILE_DIR_UNIXPATHS ;
724
- }
725
719
if (parsed == FAILURE ) {
726
720
RETURN_THROWS ();
727
721
}
@@ -1763,11 +1757,12 @@ static void spl_filesystem_tree_it_move_forward(zend_object_iterator *iter)
1763
1757
{
1764
1758
spl_filesystem_iterator * iterator = (spl_filesystem_iterator * )iter ;
1765
1759
spl_filesystem_object * object = spl_filesystem_iterator_to_object (iterator );
1760
+ bool skip_dots = SPL_HAS_FLAG (object -> flags , SPL_FILE_DIR_SKIPDOTS );
1766
1761
1767
1762
object -> u .dir .index ++ ;
1768
1763
do {
1769
1764
spl_filesystem_dir_read (object );
1770
- } while (spl_filesystem_is_dot (object -> u .dir .entry .d_name ));
1765
+ } while (skip_dots && spl_filesystem_is_dot (object -> u .dir .entry .d_name ));
1771
1766
if (object -> file_name ) {
1772
1767
zend_string_release (object -> file_name );
1773
1768
object -> file_name = NULL ;
@@ -1784,14 +1779,15 @@ static void spl_filesystem_tree_it_rewind(zend_object_iterator *iter)
1784
1779
{
1785
1780
spl_filesystem_iterator * iterator = (spl_filesystem_iterator * )iter ;
1786
1781
spl_filesystem_object * object = spl_filesystem_iterator_to_object (iterator );
1782
+ bool skip_dots = SPL_HAS_FLAG (object -> flags , SPL_FILE_DIR_SKIPDOTS );
1787
1783
1788
1784
object -> u .dir .index = 0 ;
1789
1785
if (object -> u .dir .dirp ) {
1790
1786
php_stream_rewinddir (object -> u .dir .dirp );
1791
1787
}
1792
1788
do {
1793
1789
spl_filesystem_dir_read (object );
1794
- } while (spl_filesystem_is_dot (object -> u .dir .entry .d_name ));
1790
+ } while (skip_dots && spl_filesystem_is_dot (object -> u .dir .entry .d_name ));
1795
1791
if (!Z_ISUNDEF (iterator -> current )) {
1796
1792
zval_ptr_dtor (& iterator -> current );
1797
1793
ZVAL_UNDEF (& iterator -> current );
0 commit comments