Re: [perl #34493] h2ph `extern inline' problems
[p5sagit/p5-mst-13.2.git] / locale.c
index 9d52244..c6b8782 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -1,6 +1,7 @@
 /*    locale.c
  *
- *    Copyright (c) 2001-2002, Larry Wall
+ *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ *    2000, 2001, 2002, 2003, 2005, by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
  *    License or the Artistic License, as specified in the README file.
  * nef aear, si nef aearon!
  */
 
+/* utility functions for handling locale-specific stuff like what
+ * character represents the decimal point.
+ */
+
 #include "EXTERN.h"
 #define PERL_IN_LOCALE_C
 #include "perl.h"
@@ -122,7 +127,8 @@ Perl_new_numeric(pTHX_ char *newnum)
     if (! PL_numeric_name || strNE(PL_numeric_name, newnum)) {
        Safefree(PL_numeric_name);
        PL_numeric_name = stdize_locale(savepv(newnum));
-       PL_numeric_standard = (strEQ(newnum, "C") || strEQ(newnum, "POSIX"));
+       PL_numeric_standard = ((*newnum == 'C' && newnum[1] == '\0')
+                              || strEQ(newnum, "POSIX"));
        PL_numeric_local = TRUE;
        set_numeric_radix();
     }
@@ -206,7 +212,8 @@ Perl_new_collate(pTHX_ char *newcoll)
        ++PL_collation_ix;
        Safefree(PL_collation_name);
        PL_collation_name = stdize_locale(savepv(newcoll));
-       PL_collation_standard = (strEQ(newcoll, "C") || strEQ(newcoll, "POSIX"));
+       PL_collation_standard = ((*newcoll == 'C' && newcoll[1] == '\0')
+                                || strEQ(newcoll, "POSIX"));
 
        {
          /*  2: at most so many chars ('a', 'b'). */
@@ -487,8 +494,8 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
         it overrides LC_MESSAGES for GNU gettext, and it also
         can have more than one locale, separated by spaces,
         in case you need to know.)
-        If PL_utf8locale and PL_wantutf8 (set by -C) are true,
-        perl.c:S_parse_body() will turn on the PerlIO :utf8 layer
+        If PL_utf8locale and PL_unicode (set by -C or by $ENV{PERL_UNICODE})
+         are true, perl.c:S_parse_body() will turn on the PerlIO :utf8 layer
         on STDIN, STDOUT, STDERR, _and_ the default open discipline.
       */
         bool utf8locale = FALSE;
@@ -519,12 +526,12 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
         if (utf8locale)
              PL_utf8locale = TRUE;
     }
-    /* Set PL_wantutf8 to $ENV{PERL_UTF8_LOCALE} if using PerlIO.
+    /* Set PL_unicode to $ENV{PERL_UNICODE} if using PerlIO.
        This is an alternative to using the -C command line switch
        (the -C if present will override this). */
     {
-        char *p = PerlEnv_getenv("PERL_UTF8_LOCALE");
-        PL_wantutf8 = p ? (bool) atoi(p) : FALSE;
+        char *p = PerlEnv_getenv("PERL_UNICODE");
+        PL_unicode = p ? parse_unicode_opts(&p) : 0;
     }
 #endif
 
@@ -559,6 +566,7 @@ Perl_init_i18nl14n(pTHX_ int printwarn)
  * The real transformed data begins at offset sizeof(collationix).
  * Please see sv_collxfrm() to see how this is used.
  */
+
 char *
 Perl_mem_collxfrm(pTHX_ const char *s, STRLEN len, STRLEN *xlen)
 {