jani Tue May 26 05:54:50 2009 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/zlib zlib.c
Log:
- Fixed bug #45202 (zlib.output_compression can not be set with ini_set())
http://cvs.php.net/viewvc.cgi/php-src/ext/zlib/zlib.c?r1=1.183.2.6.2.5.2.11&r2=1.183.2.6.2.5.2.12&diff_format=u
Index: php-src/ext/zlib/zlib.c
diff -u php-src/ext/zlib/zlib.c:1.183.2.6.2.5.2.11
php-src/ext/zlib/zlib.c:1.183.2.6.2.5.2.12
--- php-src/ext/zlib/zlib.c:1.183.2.6.2.5.2.11 Tue May 26 04:44:54 2009
+++ php-src/ext/zlib/zlib.c Tue May 26 05:54:50 2009
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib.c,v 1.183.2.6.2.5.2.11 2009/05/26 04:44:54 jani Exp $ */
+/* $Id: zlib.c,v 1.183.2.6.2.5.2.12 2009/05/26 05:54:50 jani Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -88,7 +88,7 @@
/* True globals, no need for thread safety */
static const int gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */
-static int php_enable_output_compression(int buffer_size TSRMLS_DC);
+static int php_zlib_output_compression_start(TSRMLS_D);
static PHP_MINIT_FUNCTION(zlib);
static PHP_MSHUTDOWN_FUNCTION(zlib);
@@ -228,6 +228,7 @@
/* {{{ OnUpdate_zlib_output_compression */
static PHP_INI_MH(OnUpdate_zlib_output_compression)
{
+ int status, int_value;
char *ini_value;
if (new_value == NULL) {
@@ -242,8 +243,10 @@
new_value_length = sizeof("1");
}
+ int_value = zend_atoi(new_value, new_value_length);
ini_value = zend_ini_string("output_handler", sizeof("output_handler"),
0);
- if (ini_value != NULL && strlen(ini_value) != 0 && zend_atoi(new_value,
new_value_length) != 0) {
+
+ if (ini_value && *ini_value && int_value) {
php_error_docref("ref.outcontrol" TSRMLS_CC, E_CORE_ERROR,
"Cannot use both zlib.output_compression and output_handler together!!");
return FAILURE;
}
@@ -253,9 +256,13 @@
return FAILURE;
}
- OnUpdateLong(entry, new_value, new_value_length, mh_arg1, mh_arg2,
mh_arg3, stage TSRMLS_CC);
+ status = OnUpdateLong(entry, new_value, new_value_length, mh_arg1,
mh_arg2, mh_arg3, stage TSRMLS_CC);
- return SUCCESS;
+ if (stage == PHP_INI_STAGE_RUNTIME && int_value) {
+ status = php_zlib_output_compression_start(TSRMLS_C);
+ }
+
+ return status;
}
/* }}} */
@@ -309,18 +316,10 @@
*/
static PHP_RINIT_FUNCTION(zlib)
{
- uint chunk_size = ZLIBG(output_compression);
-
ZLIBG(ob_gzhandler_status) = 0;
ZLIBG(compression_coding) = 0;
- if (chunk_size) {
- if (chunk_size == 1) {
- chunk_size = 4096; /* use the default size */
- ZLIBG(output_compression) = chunk_size;
- }
- php_enable_output_compression(chunk_size TSRMLS_CC);
- }
- return SUCCESS;
+
+ return php_zlib_output_compression_start(TSRMLS_C);
}
/* }}} */
@@ -1084,6 +1083,24 @@
}
/* }}} */
+/* {{{ php_zlib_output_compression_start() */
+static int php_zlib_output_compression_start(TSRMLS_D)
+{
+ switch (ZLIBG(output_compression)) {
+ case 0:
+ break;
+ case 1:
+ ZLIBG(output_compression) = 4096;
+ default:
+ /* ZLIBG(compression_coding) should be 0 when zlib
compression hasn't been started yet.. */
+ if (ZLIBG(compression_coding) == 0) {
+ return
php_enable_output_compression(ZLIBG(output_compression) TSRMLS_CC);
+ }
+ }
+ return SUCCESS;
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php