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

Reply via email to