]> granicus.if.org Git - php/commitdiff
chance CLI codepage, only when SAPI is initialized
authorAnatol Belski <ab@php.net>
Fri, 16 Dec 2016 15:49:18 +0000 (16:49 +0100)
committerAnatol Belski <ab@php.net>
Fri, 16 Dec 2016 15:49:18 +0000 (16:49 +0100)
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.

win32/codepage.c

index 511e42843c4dd45f58a2c7407608e2e300d32dfc..f87d4c0900172406f2d90b99d4d3a644fcb3a4fe 100644 (file)
@@ -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)