pollita Mon Oct 9 02:48:06 2006 UTC Modified files: /php-src/ext/standard basic_functions.c streamsfuncs.c streamsfuncs.h /php-src NEWS Log: Add stream_resolve_include_path() http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.810&r2=1.811&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.810 php-src/ext/standard/basic_functions.c:1.811 --- php-src/ext/standard/basic_functions.c:1.810 Sun Oct 8 13:34:23 2006 +++ php-src/ext/standard/basic_functions.c Mon Oct 9 02:48:06 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.810 2006/10/08 13:34:23 bjori Exp $ */ +/* $Id: basic_functions.c,v 1.811 2006/10/09 02:48:06 pollita Exp $ */ #include "php.h" #include "php_streams.h" @@ -2443,6 +2443,12 @@ ZEND_ARG_INFO(0, stream) ZEND_ARG_INFO(0, encoding) ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_resolve_include_path, 0, 0, 1) + ZEND_ARG_INFO(0, filename) + ZEND_ARG_INFO(0, context) +ZEND_END_ARG_INFO() /* }}} */ /* {{{ string.c */ static @@ -3553,6 +3559,7 @@ #endif PHP_FE(stream_copy_to_stream, arginfo_stream_copy_to_stream) PHP_FE(stream_get_contents, arginfo_stream_get_contents) + PHP_FE(stream_resolve_include_path, arginfo_stream_resolve_include_path) PHP_FE(fgetcsv, arginfo_fgetcsv) PHP_FE(fputcsv, arginfo_fputcsv) PHP_FE(flock, arginfo_flock) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/streamsfuncs.c?r1=1.94&r2=1.95&diff_format=u Index: php-src/ext/standard/streamsfuncs.c diff -u php-src/ext/standard/streamsfuncs.c:1.94 php-src/ext/standard/streamsfuncs.c:1.95 --- php-src/ext/standard/streamsfuncs.c:1.94 Sun Oct 8 13:34:23 2006 +++ php-src/ext/standard/streamsfuncs.c Mon Oct 9 02:48:06 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streamsfuncs.c,v 1.94 2006/10/08 13:34:23 bjori Exp $ */ +/* $Id: streamsfuncs.c,v 1.95 2006/10/09 02:48:06 pollita Exp $ */ #include "php.h" #include "php_globals.h" @@ -1579,6 +1579,72 @@ } /* }}} */ +/* {{{ proto string stream_resolve_include_path(string filename[, resource context]) U +Determine what file will be opened by calls to fopen() with a relative path */ +PHP_FUNCTION(stream_resolve_include_path) +{ + zval **ppfilename, *zcontext = NULL; + char *filename, *ptr = PG(include_path), *end = ptr + (ptr ? strlen(ptr) : 0), buffer[MAXPATHLEN]; + int filename_len; + php_stream_context *context = NULL; + struct stat sb; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|r", &ppfilename, &zcontext) == FAILURE || + php_stream_path_param_encode(ppfilename, &filename, &filename_len, REPORT_ERRORS, context = php_stream_context_from_zval(zcontext, 0)) == FAILURE) { + return; + } + + while (ptr < end) { + char *s = strchr(ptr, DEFAULT_DIR_SEPARATOR); + + if (!s) { + s = end; + } + + if (s == ptr) { + ptr++; + continue; + } + + if ((s - ptr) + 1 + filename_len >= MAXPATHLEN) { + /* Too long to try */ + ptr = s + 1; + continue; + } + + memcpy(buffer, ptr, s - ptr); + buffer[s - ptr] = '/'; + memcpy(buffer + (s - ptr) + 1, filename, filename_len + 1); + + if (php_check_open_basedir_ex(buffer, 0 TSRMLS_CC)) { + ptr = s + 1; + continue; + } + + if (VCWD_STAT(buffer, &sb)) { + ptr = s + 1; + continue; + } + + if (UG(unicode)) { + UChar *upath; + int upath_len; + + if (SUCCESS == php_stream_path_decode(NULL, &upath, &upath_len, buffer, (s - ptr) + 1 + filename_len, REPORT_ERRORS, context)) { + RETURN_UNICODEL(upath, upath_len, 0); + } else { + /* Fallback */ + RETURN_STRINGL(buffer, (s - ptr) + 1 + filename_len, 1); + } + } else { + RETURN_STRINGL(buffer, (s - ptr) + 1 + filename_len, 1); + } + } + + RETURN_FALSE; +} +/* }}} */ + /* * Local variables: * tab-width: 4 http://cvs.php.net/viewvc.cgi/php-src/ext/standard/streamsfuncs.h?r1=1.16&r2=1.17&diff_format=u Index: php-src/ext/standard/streamsfuncs.h diff -u php-src/ext/standard/streamsfuncs.h:1.16 php-src/ext/standard/streamsfuncs.h:1.17 --- php-src/ext/standard/streamsfuncs.h:1.16 Mon Jun 26 11:31:19 2006 +++ php-src/ext/standard/streamsfuncs.h Mon Oct 9 02:48:06 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streamsfuncs.h,v 1.16 2006/06/26 11:31:19 bjori Exp $ */ +/* $Id: streamsfuncs.h,v 1.17 2006/10/09 02:48:06 pollita Exp $ */ /* Flags for stream_socket_client */ #define PHP_STREAM_CLIENT_PERSISTENT 1 @@ -55,6 +55,7 @@ PHP_FUNCTION(stream_encoding); PHP_FUNCTION(stream_socket_enable_crypto); PHP_FUNCTION(stream_socket_pair); +PHP_FUNCTION(stream_resolve_include_path); /* * Local variables: http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2127&r2=1.2128&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2127 php-src/NEWS:1.2128 --- php-src/NEWS:1.2127 Wed Oct 4 12:58:02 2006 +++ php-src/NEWS Mon Oct 9 02:48:06 2006 @@ -55,6 +55,7 @@ . sys_get_temp_dir() function that returns the default directory for temporary files (as requested in bug #35380). (Hartmut) . "context" and "binary_pipes" params in "other_options" arg. (Sara) + . stream_resolve_include_path(). (Sara) - Fixed bug #36630 (umask not reset at the end of the request). (Ilia) - Fixed bug #34286 (__toString() behavior is inconsistent). (Marcus)
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php