From 7017cc588c193c11093a99576050f8cbc8739e2a Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Tue, 13 May 2003 23:09:27 +0000 Subject: [PATCH] Use and supply zend_open func --- main/main.c | 12 ++++++++++++ main/php_streams.h | 4 ++++ main/streams.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/main/main.c b/main/main.c index 2ebad78e60..183531460a 100644 --- a/main/main.c +++ b/main/main.c @@ -767,6 +767,17 @@ static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path } /* }}} */ + +/* {{{ 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) @@ -1100,6 +1111,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod 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; diff --git a/main/php_streams.h b/main/php_streams.h index 01dfa2cfd6..83e8c8b71c 100755 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -553,6 +553,10 @@ PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstr 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; diff --git a/main/streams.c b/main/streams.c index 5776a0e326..5c6108a915 100755 --- a/main/streams.c +++ b/main/streams.c @@ -2704,6 +2704,42 @@ PHPAPI FILE * _php_stream_open_wrapper_as_file(char *path, char *mode, int optio } /* }}} */ + + +/* {{{ 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) { -- 2.40.0