}
/* }}} */
+
+/* {{{ php_open_wrapper_for_zend
+ */
+static zend_bool php_open_wrapper_for_zend(const char *filename, struct _zend_file_handle *fh)
+{
+ TSRMLS_FETCH();
+
+ return php_stream_open_wrapper_as_file_handle((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, fh);
+}
+/* }}} */
+
/* {{{ php_get_configuration_directive_for_zend
*/
static int php_get_configuration_directive_for_zend(char *name, uint name_length, zval *contents)
zuf.printf_function = php_printf;
zuf.write_function = php_body_write_wrapper;
zuf.fopen_function = php_fopen_wrapper_for_zend;
+ zuf.open_function = php_open_wrapper_for_zend;
zuf.message_handler = php_message_handler_for_zend;
zuf.block_interruptions = sapi_module.block_interruptions;
zuf.unblock_interruptions = sapi_module.unblock_interruptions;
PHPAPI FILE * _php_stream_open_wrapper_as_file(char * path, char * mode, int options, char **opened_path STREAMS_DC TSRMLS_DC);
#define php_stream_open_wrapper_as_file(path, mode, options, opened_path) _php_stream_open_wrapper_as_file((path), (mode), (options), (opened_path) STREAMS_CC TSRMLS_CC)
+
+PHPAPI zend_bool _php_stream_open_wrapper_as_file_handle(char * path, char * mode, int options, zend_file_handle * STREAMS_DC TSRMLS_DC);
+#define php_stream_open_wrapper_as_file_handle(path, mode, options, fh) _php_stream_open_wrapper_as_file_handle((path), (mode), (options), (fh) STREAMS_CC TSRMLS_CC)
+
/* for user-space streams */
PHPAPI extern php_stream_ops php_stream_userspace_ops;
PHPAPI extern php_stream_ops php_stream_userspace_dir_ops;
}
/* }}} */
+
+
+/* {{{ php_stream_open_wrapper_as_file_handle */
+PHPAPI zend_bool _php_stream_open_wrapper_as_file_handle(char *path, char *mode, int options, zend_file_handle *fh STREAMS_DC TSRMLS_DC)
+{
+ php_stream *stream = NULL;
+
+ stream = php_stream_open_wrapper_rel(path, mode, options|STREAM_WILL_CAST, &fh->opened_path);
+
+ if (stream == NULL)
+ return FAILURE;
+
+ if (php_stream_cast(stream, PHP_STREAM_AS_FD | PHP_STREAM_CAST_TRY_HARD
+ | PHP_STREAM_CAST_RELEASE, (void **) &fh->handle.fd,
+ REPORT_ERRORS) == SUCCESS) {
+ if ((options & STREAM_OPEN_FOR_INCLUDE)
+ && php_stream_is(stream, PHP_STREAM_IS_SOCKET)) {
+ fh->type = ZEND_HANDLE_SOCKET_FD;
+ } else {
+ fh->type = ZEND_HANDLE_FD;
+ }
+ } else if (php_stream_cast(stream, PHP_STREAM_AS_STDIO
+ |PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE,
+ (void**) &fh->handle.fp, REPORT_ERRORS) == SUCCESS) {
+ fh->type = ZEND_HANDLE_FP;
+ } else {
+ php_stream_close(stream);
+ if (fh->opened_path)
+ efree(fh->opened_path);
+ fh->opened_path = NULL;
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+/* }}} */
+
/* {{{ php_stream_make_seekable */
PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC TSRMLS_DC)
{