]> granicus.if.org Git - php/commitdiff
More internal output buffering fixes
authorZeev Suraski <zeev@php.net>
Tue, 6 Mar 2001 16:28:51 +0000 (16:28 +0000)
committerZeev Suraski <zeev@php.net>
Tue, 6 Mar 2001 16:28:51 +0000 (16:28 +0000)
ext/standard/output.c
ext/standard/php_output.h
main/output.c
main/php_output.h

index 6055439725b77aa73c16a01ae2c893c1fd6467b6..59fe87c761e1e779643024f2b6f87974fe30be61 100644 (file)
@@ -123,7 +123,6 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
        int final_buffer_length=0;
        zval *alternate_buffer=NULL;
        char *to_be_destroyed_buffer;
-       char *internal_output_handler_buffer;
        int status;
        SLS_FETCH();
        OLS_FETCH();
@@ -143,8 +142,9 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
        }
 
        if (OG(active_ob_buffer).internal_output_handler) {
-               internal_output_handler_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
-               OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, &internal_output_handler_buffer, status);
+               final_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
+               final_buffer_length = OG(active_ob_buffer).internal_output_handler_buffer_size;
+               OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, &final_buffer, &final_buffer_length, status);
        } else if (OG(active_ob_buffer).output_handler) {
                zval **params[2];
                zval *orig_buffer;
@@ -196,8 +196,8 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
 
        if (!just_flush) {
                if (OG(active_ob_buffer).internal_output_handler
-                       && (internal_output_handler_buffer != OG(active_ob_buffer).internal_output_handler_buffer)) {
-                       efree(internal_output_handler_buffer);
+                       && (final_buffer != OG(active_ob_buffer).internal_output_handler_buffer)) {
+                       efree(final_buffer);
                }
                if (OG(nesting_level)>1) { /* restore previous buffer */
                        php_ob_buffer *ob_buffer_p;
index 3bfd5d078c5fa8864a680834a6907a19caa8f191..39bb8954b2b0518cd0149006c1c0e39b59aab49f 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "php.h"
 
-typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, int mode);
+typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode);
 
 PHPAPI void php_output_startup(void);
 void php_output_register_constants(void);
index 6055439725b77aa73c16a01ae2c893c1fd6467b6..59fe87c761e1e779643024f2b6f87974fe30be61 100644 (file)
@@ -123,7 +123,6 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
        int final_buffer_length=0;
        zval *alternate_buffer=NULL;
        char *to_be_destroyed_buffer;
-       char *internal_output_handler_buffer;
        int status;
        SLS_FETCH();
        OLS_FETCH();
@@ -143,8 +142,9 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
        }
 
        if (OG(active_ob_buffer).internal_output_handler) {
-               internal_output_handler_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
-               OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, &internal_output_handler_buffer, status);
+               final_buffer = OG(active_ob_buffer).internal_output_handler_buffer;
+               final_buffer_length = OG(active_ob_buffer).internal_output_handler_buffer_size;
+               OG(active_ob_buffer).internal_output_handler(OG(active_ob_buffer).buffer, OG(active_ob_buffer).text_length, &final_buffer, &final_buffer_length, status);
        } else if (OG(active_ob_buffer).output_handler) {
                zval **params[2];
                zval *orig_buffer;
@@ -196,8 +196,8 @@ PHPAPI void php_end_ob_buffer(zend_bool send_buffer, zend_bool just_flush)
 
        if (!just_flush) {
                if (OG(active_ob_buffer).internal_output_handler
-                       && (internal_output_handler_buffer != OG(active_ob_buffer).internal_output_handler_buffer)) {
-                       efree(internal_output_handler_buffer);
+                       && (final_buffer != OG(active_ob_buffer).internal_output_handler_buffer)) {
+                       efree(final_buffer);
                }
                if (OG(nesting_level)>1) { /* restore previous buffer */
                        php_ob_buffer *ob_buffer_p;
index 3bfd5d078c5fa8864a680834a6907a19caa8f191..39bb8954b2b0518cd0149006c1c0e39b59aab49f 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "php.h"
 
-typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, int mode);
+typedef void (*php_output_handler_func_t)(char *output, uint output_len, char **handled_output, uint *handled_output_len, int mode);
 
 PHPAPI void php_output_startup(void);
 void php_output_register_constants(void);