From 5c9cd965bec9393e2c5e6594763a8a3efd0ad771 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 31 Mar 2017 00:35:02 +0000 Subject: RUBY_DEBUG codepage option [ci skip] * debug.c (set_debug_option): add "codepage" option to force locale charmap on Windows. * localeinit.c (locale_charmap): use the codepage by debug env if given. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58224 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- localeinit.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'localeinit.c') diff --git a/localeinit.c b/localeinit.c index 394d8dc7d6..fa9cc26b8e 100644 --- a/localeinit.c +++ b/localeinit.c @@ -23,6 +23,12 @@ #define CP_FORMAT(buf, codepage) snprintf(buf, sizeof(buf), "CP%u", (codepage)) #endif +#if defined _WIN32 && defined RUBY_DEBUG_ENV +extern UINT ruby_w32_codepage; +#else +enum {ruby_w32_codepage = 0}; +#endif + #ifndef NO_LOCALE_CHARMAP # if defined _WIN32 || defined __CYGWIN__ || defined HAVE_LANGINFO_H # define NO_LOCALE_CHARMAP 0 @@ -43,7 +49,8 @@ locale_charmap(VALUE (*conv)(const char *)) codeset = nl_langinfo_codeset(); # endif if (!codeset) { - UINT codepage = GetConsoleCP(); + UINT codepage = ruby_w32_codepage; + if (!codepage) codepage = GetConsoleCP(); if (!codepage) codepage = GetACP(); CP_FORMAT(cp, codepage); codeset = cp; @@ -119,7 +126,9 @@ Init_enc_set_filesystem_encoding(void) idx = ENCINDEX_US_ASCII; #elif defined _WIN32 char cp[SIZEOF_CP_NAME]; - CP_FORMAT(cp, AreFileApisANSI() ? GetACP() : GetOEMCP()); + const UINT codepage = ruby_w32_codepage ? ruby_w32_codepage : + AreFileApisANSI() ? GetACP() : GetOEMCP(); + CP_FORMAT(cp, codepage); idx = rb_enc_find_index(cp); if (idx < 0) idx = ENCINDEX_ASCII; #elif defined __CYGWIN__ -- cgit v1.2.1