From: Moriyoshi Koizumi Date: Sun, 3 Aug 2008 00:04:30 +0000 (+0000) Subject: - MFH:Forgot to take account of the case when mbstring.language is processed X-Git-Tag: php-5.2.7RC1~151 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf4e80bd5045a81d4750d6ff64f0edfd6d77295a;p=php - MFH:Forgot to take account of the case when mbstring.language is processed afterwards. --- diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 6d1854016c..84090c35bb 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -655,8 +655,8 @@ static PHP_INI_MH(OnUpdate_mbstring_http_output) } /* }}} */ -/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */ -static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) +/* {{{ static _php_mb_ini_mbstring_internal_encoding_set */ +static int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC) { enum mbfl_no_encoding no_encoding; const char *enc_name = NULL; @@ -732,6 +732,23 @@ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) } /* }}} */ +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */ +static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) +{ + if (stage == PHP_INI_STAGE_STARTUP || stage == PHP_INI_STAGE_SHUTDOWN) { + return _php_mb_ini_mbstring_internal_encoding_set(new_value, new_value_length TSRMLS_CC); + } else { + // the corresponding mbstring globals needs to be set according to the + // ini value in the later stage because it never falls back to the + // default value if 1. no value for mbstring.internal_encoding is given, + // 2. mbstring.language directive is processed in per-dir or runtime + // context and 3. call to the handler for mbstring.language is done + // after mbstring.internal_encoding is handled. + return SUCCESS; + } +} +/* }}} */ + #ifdef ZEND_MULTIBYTE /* {{{ static PHP_INI_MH(OnUpdate_mbstring_script_encoding) */ static PHP_INI_MH(OnUpdate_mbstring_script_encoding) @@ -945,8 +962,10 @@ PHP_RINIT_FUNCTION(mbstring) zend_function *func, *orig; const struct mb_overload_def *p; - php_mb_nls_get_default_detect_order_list(MBSTRG(language), - &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size)); + { + char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0); + _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC); + } MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding); MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding);