mirror of
https://github.com/php/php-src.git
synced 2026-03-31 04:32:19 +02:00
- Fix a minor issue with glob support - forgot to set length of string
- Add ability to not use glob on subdirs
This commit is contained in:
@@ -1206,24 +1206,22 @@ SPL_METHOD(RecursiveDirectoryIterator, getChildren)
|
||||
spl_filesystem_object_get_file_name(intern TSRMLS_CC);
|
||||
|
||||
INIT_PZVAL(&zflags);
|
||||
ZVAL_LONG(&zflags, intern->flags);
|
||||
|
||||
INIT_PZVAL(&zpath);
|
||||
if (intern->flags & SPL_FILE_DIR_USE_GLOB) {
|
||||
if ((intern->flags & (SPL_FILE_DIR_USE_GLOB|SPL_FILE_DIR_NO_GLOB_CHILD)) == SPL_FILE_DIR_USE_GLOB) {
|
||||
ZVAL_LONG(&zflags, intern->flags);
|
||||
Z_TYPE(zpath) = IS_STRING;
|
||||
spprintf(&Z_STRVAL(zpath), 0, "%R%c%s",
|
||||
Z_STRLEN(zpath) = spprintf(&Z_STRVAL(zpath), 0, "%R%c%s",
|
||||
intern->file_name_type, intern->file_name,
|
||||
DEFAULT_SLASH,
|
||||
php_glob_stream_get_pattern(intern->u.dir.dirp, 0, NULL));
|
||||
} else {
|
||||
ZVAL_ZSTRL(&zpath, intern->file_name_type, intern->file_name, intern->file_name_len, 0);
|
||||
ZVAL_LONG(&zflags, intern->flags & ~SPL_FILE_DIR_USE_GLOB);
|
||||
ZVAL_ZSTRL(&zpath, intern->file_name_type, intern->file_name, intern->file_name_len, 1);
|
||||
}
|
||||
|
||||
spl_instantiate_arg_ex2(spl_ce_RecursiveDirectoryIterator, &return_value, 0, &zpath, &zflags TSRMLS_CC);
|
||||
|
||||
if (intern->flags & SPL_FILE_DIR_USE_GLOB) {
|
||||
efree(Z_STRVAL(zpath));
|
||||
}
|
||||
zval_dtor(&zpath);
|
||||
|
||||
subdir = (spl_filesystem_object*)zend_object_store_get_object(return_value TSRMLS_CC);
|
||||
if (subdir) {
|
||||
@@ -2509,7 +2507,8 @@ PHP_MINIT_FUNCTION(spl_directory)
|
||||
REGISTER_SPL_SUB_CLASS_EX(DirectoryIterator, SplFileInfo, spl_filesystem_object_new, spl_DirectoryIterator_functions);
|
||||
zend_class_implements(spl_ce_DirectoryIterator TSRMLS_CC, 1, zend_ce_iterator);
|
||||
|
||||
REGISTER_SPL_CLASS_CONST_LONG(DirectoryIterator, "USE_GLOB", SPL_FILE_DIR_USE_GLOB);
|
||||
REGISTER_SPL_CLASS_CONST_LONG(DirectoryIterator, "USE_GLOB", SPL_FILE_DIR_USE_GLOB);
|
||||
REGISTER_SPL_CLASS_CONST_LONG(DirectoryIterator, "NO_GLOB_CHILD", SPL_FILE_DIR_NO_GLOB_CHILD);
|
||||
|
||||
spl_ce_DirectoryIterator->get_iterator = spl_filesystem_dir_get_iterator;
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ static inline spl_filesystem_object* spl_filesystem_iterator_to_object(spl_files
|
||||
|
||||
#define SPL_FILE_DIR_USE_GLOB 0x00001000 /* use glob for open dir*/
|
||||
#define SPL_FILE_DIR_GLOB_REFETCH_PATH 0x00002000 /* whether we need to refetch the path in glob mode */
|
||||
#define SPL_FILE_DIR_NO_GLOB_CHILD 0x00004000 /* do not use glob on childs */
|
||||
|
||||
#endif /* SPL_DIRECTORY_H */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user