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

Reply via email to