helly Sat Mar 3 23:41:10 2007 UTC Modified files: /php-src/main/streams glob_wrapper.c php_stream_glob_wrapper.h Log: - Allow to retrieve flags with php_glob_stream_get_count() - Detect meta chars in pathand switch to append mode so that path can actually changes for each entry http://cvs.php.net/viewvc.cgi/php-src/main/streams/glob_wrapper.c?r1=1.4&r2=1.5&diff_format=u Index: php-src/main/streams/glob_wrapper.c diff -u php-src/main/streams/glob_wrapper.c:1.4 php-src/main/streams/glob_wrapper.c:1.5 --- php-src/main/streams/glob_wrapper.c:1.4 Sat Mar 3 23:04:57 2007 +++ php-src/main/streams/glob_wrapper.c Sat Mar 3 23:41:10 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: glob_wrapper.c,v 1.4 2007/03/03 23:04:57 helly Exp $ */ +/* $Id: glob_wrapper.c,v 1.5 2007/03/03 23:41:10 helly Exp $ */ #include "php.h" #include "php_streams_int.h" @@ -90,11 +90,21 @@ } /* }}} */ -PHPAPI int _php_glob_stream_get_count(php_stream *stream STREAMS_DC TSRMLS_DC) /* {{{ */ +PHPAPI int _php_glob_stream_get_count(php_stream *stream, int *pflags STREAMS_DC TSRMLS_DC) /* {{{ */ { glob_s_t *pglob = (glob_s_t *)stream->abstract; - - return pglob ? pglob->glob.gl_pathc : 0; + + if (pglob) { + if (pflags) { + *pflags = pglob->flags; + } + return pglob->glob.gl_pathc; + } else { + if (pflags) { + *pflags = 0; + } + return 0; + } } /* }}} */ @@ -199,7 +209,7 @@ int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC) { glob_s_t *pglob; - int ret; + int ret, path_len; char *tmp, *pos; if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) && php_check_open_basedir(path TSRMLS_CC)) { @@ -208,9 +218,12 @@ if (!strncmp(path, "glob://", sizeof("glob://")-1)) { path += sizeof("glob://")-1; + path_len = strlen(path); if (opened_path) { - *opened_path = estrdup(path); + *opened_path = estrndup(path, path_len); } + } else { + path_len = strlen(path); } pglob = ecalloc(sizeof(*pglob), 1); @@ -225,17 +238,6 @@ } } -#ifdef GLOB_APPEND - if ((pglob->flags & GLOB_APPEND) == 0) -#endif - { - if (pglob->glob.gl_pathc) { - php_glob_stream_path_split(pglob, pglob->glob.gl_pathv[0], 1, &tmp TSRMLS_CC); - } else { - php_glob_stream_path_split(pglob, path, 1, &tmp TSRMLS_CC); - } - } - pos = path; if ((tmp = strrchr(pos, '/')) != NULL) { pos = tmp+1; @@ -249,6 +251,16 @@ pglob->pattern_len = strlen(pos); pglob->pattern = estrndup(pos, pglob->pattern_len); + if (strcspn(path, "*?") < (path_len - pglob->pattern_len)) { + pglob->flags |= GLOB_APPEND; + } + + if (pglob->glob.gl_pathc) { + php_glob_stream_path_split(pglob, pglob->glob.gl_pathv[0], 1, &tmp TSRMLS_CC); + } else { + php_glob_stream_path_split(pglob, path, 1, &tmp TSRMLS_CC); + } + return php_stream_alloc(&php_glob_stream_ops, pglob, 0, mode); } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/main/streams/php_stream_glob_wrapper.h?r1=1.4&r2=1.5&diff_format=u Index: php-src/main/streams/php_stream_glob_wrapper.h diff -u php-src/main/streams/php_stream_glob_wrapper.h:1.4 php-src/main/streams/php_stream_glob_wrapper.h:1.5 --- php-src/main/streams/php_stream_glob_wrapper.h:1.4 Sat Mar 3 23:04:57 2007 +++ php-src/main/streams/php_stream_glob_wrapper.h Sat Mar 3 23:41:10 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_stream_glob_wrapper.h,v 1.4 2007/03/03 23:04:57 helly Exp $ */ +/* $Id: php_stream_glob_wrapper.h,v 1.5 2007/03/03 23:41:10 helly Exp $ */ PHPAPI extern php_stream_wrapper php_glob_stream_wrapper; PHPAPI extern php_stream_ops php_glob_stream_ops; @@ -29,8 +29,8 @@ PHPAPI char* _php_glob_stream_get_pattern(php_stream *stream, int copy, int *plen STREAMS_DC TSRMLS_DC); #define php_glob_stream_get_pattern(stream, copy, plen) _php_glob_stream_get_pattern((stream), (copy), (plen) STREAMS_CC TSRMLS_CC) -PHPAPI int _php_glob_stream_get_count(php_stream *stream STREAMS_DC TSRMLS_DC); -#define php_glob_stream_get_count(stream) _php_glob_stream_get_count((stream) STREAMS_CC TSRMLS_CC) +PHPAPI int _php_glob_stream_get_count(php_stream *stream, int *pflags STREAMS_DC TSRMLS_DC); +#define php_glob_stream_get_count(stream, pflags) _php_glob_stream_get_count((stream), (pflags) STREAMS_CC TSRMLS_CC) END_EXTERN_C()
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php