+/* {{{ STATUS http_start_ob_handler(php_output_handler_func_t, char *, uint, zend_bool) */
+PHP_HTTP_API STATUS _http_start_ob_handler(php_output_handler_func_t handler_func,
+ char *handler_name, uint chunk_size, zend_bool erase TSRMLS_DC)
+{
+ php_ob_buffer **stack;
+ int count, i;
+
+ if (count = OG(ob_nesting_level)) {
+ stack = ecalloc(sizeof(php_ob_buffer), count);
+
+ if (count > 1) {
+ zend_stack_apply_with_argument(&OG(ob_buffers), ZEND_STACK_APPLY_BOTTOMUP,
+ (int (*)(void *elem, void *)) http_ob_stack_get, stack);
+ }
+
+ if (count > 0) {
+ http_ob_stack_get(&OG(active_ob_buffer), stack);
+ }
+
+ while (OG(ob_nesting_level)) {
+ php_end_ob_buffer(0, 0 TSRMLS_CC);
+ }
+ }
+
+ php_ob_set_internal_handler(handler_func, chunk_size, handler_name, erase TSRMLS_CC);
+
+ for (i = 0; i < count; i++) {
+ php_ob_buffer *s = stack[i];
+ php_start_ob_buffer_named(s->handler_name, s->chunk_size, s->erase TSRMLS_CC);
+ php_body_write(s->buffer, s->text_length TSRMLS_CC);
+ }
+
+ return SUCCESS;
+}
+/* }}} */
+