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