In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/730252b299f0cde0043bed7edb5bcf0c3e37fd38?hp=89f7b9aac23a02ff8140b277b76eb7a70b0b04cc>
- Log ----------------------------------------------------------------- commit 730252b299f0cde0043bed7edb5bcf0c3e37fd38 Author: Karl Williamson <pub...@khwilliamson.com> Date: Wed Feb 19 15:39:18 2014 -0700 locale.c: Change 'and' to '&&' To actually compile on Windows M locale.c commit 6a188f46435c74e7ced12ece237a7fdb3923a609 Author: Karl Williamson <pub...@khwilliamson.com> Date: Wed Feb 19 15:33:00 2014 -0700 run/locale.t: White-space only Align a column M t/run/locale.t commit 481465ea22afd2442b2dd335f19832773b0663e2 Author: Karl Williamson <pub...@khwilliamson.com> Date: Wed Feb 19 15:31:07 2014 -0700 locale.c: Another POSIX emulation fix on Windows Right after I pushed the previous commit, I realized that the system default locale on Windows should also have lower priority (besides LANG) than the LC_foo environment variables. This should do that. M locale.c M t/run/locale.t ----------------------------------------------------------------------- Summary of changes: locale.c | 31 ++++++++++++++----------------- t/run/locale.t | 18 ++++++++++++++++-- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/locale.c b/locale.c index b8bfe4a..3fc55a8 100644 --- a/locale.c +++ b/locale.c @@ -348,7 +348,7 @@ Perl_my_setlocale(pTHX_ int category, const char* locale) * otherwise to use the particular category's variable if set; otherwise to * use the LANG variable. */ - unsigned override_LANG = 0; + bool override_LC_ALL = 0; char * result; if (locale && strEQ(locale, "")) { @@ -359,7 +359,7 @@ Perl_my_setlocale(pTHX_ int category, const char* locale) switch (category) { # ifdef LC_ALL case LC_ALL: - override_LANG++; + override_LC_ALL = TRUE; break; /* We already know its variable isn't set */ # endif # ifdef USE_LOCALE_TIME @@ -399,10 +399,7 @@ Perl_my_setlocale(pTHX_ int category, const char* locale) } if (! locale) { locale = PerlEnv_getenv("LANG"); - if (locale) { - override_LANG++; - } - else { + if (! locale) { locale = ""; } } @@ -413,48 +410,48 @@ Perl_my_setlocale(pTHX_ int category, const char* locale) result = setlocale(category, locale); - if (override_LANG < 2) { + if (! override_LC_ALL) { return result; } /* Here the input locale was LC_ALL, and we have set it to what is in the - * LANG variable. But LANG has lower priority than the other LC_foo - * variables, so override it for each one that is set. (If they are set to - * "", it means to use the same thing we just set LC_ALL to, so can skip) - * */ + * LANG variable or the system default if there is no LANG. But these have + * lower priority than the other LC_foo variables, so override it for each + * one that is set. (If they are set to "", it means to use the same thing + * we just set LC_ALL to, so can skip) */ # ifdef USE_LOCALE_TIME result = PerlEnv_getenv("LC_TIME"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_TIME, result); } # endif # ifdef USE_LOCALE_CTYPE result = PerlEnv_getenv("LC_CTYPE"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_CTYPE, result); } # endif # ifdef USE_LOCALE_COLLATE result = PerlEnv_getenv("LC_COLLATE"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_COLLATE, result); } # endif # ifdef USE_LOCALE_MONETARY result = PerlEnv_getenv("LC_MONETARY"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_MONETARY, result); } # endif # ifdef USE_LOCALE_NUMERIC result = PerlEnv_getenv("LC_NUMERIC"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_NUMERIC, result); } # endif # ifdef USE_LOCALE_MESSAGES result = PerlEnv_getenv("LC_MESSAGES"); - if (result and strNE(result, "")) { + if (result && strNE(result, "")) { setlocale(LC_MESSAGES, result); } # endif diff --git a/t/run/locale.t b/t/run/locale.t index e326f78..f522e0f 100644 --- a/t/run/locale.t +++ b/t/run/locale.t @@ -177,7 +177,7 @@ EOF local $ENV{LC_NUMERIC} = $_; local $ENV{LC_ALL}; # so it never overrides LC_NUMERIC fresh_perl_is(<<'EOF', "$difference "x4, {}, - use locale; + use locale; use POSIX qw(locale_h); setlocale(LC_NUMERIC, ""); my $in = 4.2; @@ -187,6 +187,20 @@ EOF } for ($different) { + local $ENV{LC_NUMERIC} = $_; + local $ENV{LC_ALL}; # so it never overrides LC_NUMERIC + local $ENV{LANG}; # so on Windows gets sys default locale + fresh_perl_is(<<'EOF', "$difference "x4, {}, + use locale; + use POSIX qw(locale_h); + setlocale(LC_NUMERIC, ""); + my $in = 4.2; + printf("%g %g %s %s ", $in, 4.2, sprintf("%g", $in), sprintf("%g", 4.2)); +EOF + "Uses the above test to verify that on Windows the system default locale has lower priority than LC_NUMERIC"); + } + + for ($different) { local $ENV{LC_ALL} = "invalid"; local $ENV{LC_NUMERIC} = "invalid"; local $ENV{LANG} = $_; @@ -308,4 +322,4 @@ EOF } -sub last { 18 } +sub last { 19 } -- Perl5 Master Repository