]> granicus.if.org Git - php/commitdiff
Added php_ob_handler_used to check if a specific output handler is used
authorMarcus Boerger <helly@php.net>
Mon, 5 Aug 2002 18:54:53 +0000 (18:54 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 5 Aug 2002 18:54:53 +0000 (18:54 +0000)
in c.

main/output.c
main/php_output.h

index 025a0aeeec619894f5cb911cb15142caa35093ca..040ef62eea855fef24f923b5ecb3038714aafacd 100644 (file)
@@ -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)
index 977c217d65829fc584f30510e4fa462150d98cbf..db0e89b64e5e356381d65598cea09117ab704282 100644 (file)
@@ -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);