From: Marcus Boerger Date: Mon, 5 Aug 2002 18:54:53 +0000 (+0000) Subject: Added php_ob_handler_used to check if a specific output handler is used X-Git-Tag: dev~14 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6d21c9465da87324fe58549152674440fb20ba99;p=php Added php_ob_handler_used to check if a specific output handler is used in c. --- diff --git a/main/output.c b/main/output.c index 025a0aeeec..040ef62eea 100644 --- a/main/output.c +++ b/main/output.c @@ -403,6 +403,40 @@ PHP_FUNCTION(ob_list_handlers) } /* }}} */ +/* {{{ php_ob_used_each + Sets handler_name to NULL is found + */ +static int php_ob_handler_used_each(php_ob_buffer *ob_buffer, char **handler_name) +{ + if ((!strcmp(ob_buffer->handler_name, "zlib output compression") && ob_buffer->internal_output_handler && !strcmp("ob_gzhandler", *handler_name)) + || !strcmp(ob_buffer->handler_name, *handler_name)) + { + *handler_name = NULL; + return 1; + } + return 0; +} +/* }}} */ + +/* {{{ php_ob_used + returns 1 if given handler_name is used as output_handler + */ +PHPAPI int php_ob_handler_used(char *handler_name TSRMLS_DC) +{ + char *tmp = handler_name; + + if (OG(ob_nesting_level)) { + if (!strcmp(OG(active_ob_buffer).handler_name, handler_name)) { + return 1; + } + if (OG(ob_nesting_level)>1) { + zend_stack_apply_with_argument(&OG(ob_buffers), ZEND_STACK_APPLY_BOTTOMUP, (int (*)(void *element, void *)) php_ob_handler_used_each, &tmp); + } + } + return tmp ? 0 : 1; +} +/* }}} */ + /* {{{ php_ob_append */ static void php_ob_append(const char *text, uint text_length TSRMLS_DC) diff --git a/main/php_output.h b/main/php_output.h index 977c217d65..db0e89b64e 100644 --- a/main/php_output.h +++ b/main/php_output.h @@ -39,6 +39,7 @@ PHPAPI void php_end_implicit_flush(TSRMLS_D); PHPAPI char *php_get_output_start_filename(TSRMLS_D); PHPAPI int php_get_output_start_lineno(TSRMLS_D); PHPAPI void php_ob_set_internal_handler(php_output_handler_func_t internal_output_handler, uint buffer_size, char *handler_name, zend_bool erase TSRMLS_DC); +PHPAPI int php_ob_handler_used(char *handler_name TSRMLS_DC); PHP_FUNCTION(ob_start); PHP_FUNCTION(ob_flush);