summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2016-12-16 16:49:18 +0100
committerAnatol Belski <ab@php.net>2016-12-16 16:49:18 +0100
commitb91d7f186acc7c107fa330bc8697c2cc98360e45 (patch)
tree4e815cf439a28e118343d738c430aa0076287ed3
parent8ba7878f1b88f760d1cf483321e2ac1b27a93c58 (diff)
downloadphp-git-b91d7f186acc7c107fa330bc8697c2cc98360e45.tar.gz
chance CLI codepage, only when SAPI is initialized
This finally solves issues with DBSC console codepages, and in general improves the console codepage switching. When module_initialized, all the possible encoding INI settings with regard to possible modifications are set, and that's the right moment to switch the console codepage in regard to I/O. CJK glyphs might take more than 1 cell, so then visual issues can occur, when switching console codepage back and forth. Users are free to use ini_set(), but any visual issues are then up to the user responsibility.
-rw-r--r--win32/codepage.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/win32/codepage.c b/win32/codepage.c
index 511e42843c..f87d4c0900 100644
--- a/win32/codepage.c
+++ b/win32/codepage.c
@@ -384,6 +384,8 @@ PW32CP wchar_t *php_win32_cp_env_any_to_w(const char* env)
static BOOL php_win32_cp_cli_io_setup(void)
{
+ BOOL ret = TRUE;
+
if (PG(input_encoding) && PG(input_encoding)[0]) {
cur_in_cp = php_win32_cp_get_by_enc(PG(input_encoding));
if (!cur_in_cp) {
@@ -402,7 +404,11 @@ static BOOL php_win32_cp_cli_io_setup(void)
cur_out_cp = cur_cp;
}
- return SetConsoleCP(cur_in_cp->id) && SetConsoleOutputCP(cur_out_cp->id);
+ if(php_get_module_initialized()) {
+ ret = SetConsoleCP(cur_in_cp->id) && SetConsoleOutputCP(cur_out_cp->id);
+ }
+
+ return ret;
}
PW32CP const struct php_win32_cp *php_win32_cp_do_setup(const char *enc)