Further tweaks to perluniintro.pod
[p5sagit/p5-mst-13.2.git] / locale.c
index 2c84ab5..0986614 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -29,6 +29,8 @@
 #   include <langinfo.h>
 #endif
 
+#include "reentr.h"
+
 /*
  * Standardize the locale name from a string returned by 'setlocale'.
  *
@@ -216,7 +218,7 @@ Perl_new_collate(pTHX_ char *newcoll)
          SSize_t mult = fb - fa;
          if (mult < 1)
              Perl_croak(aTHX_ "strxfrm() gets absurd");
-         PL_collxfrm_base = (fa > mult) ? (fa - mult) : 0;
+         PL_collxfrm_base = (fa > (Size_t)mult) ? (fa - mult) : 0;
          PL_collxfrm_mult = mult;
        }
     }
@@ -471,7 +473,19 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
 
 #endif /* USE_LOCALE */
 
+#ifdef USE_PERLIO
     {
+      /* Set PL_wantutf8 to TRUE if using PerlIO _and_
+        any of the following are true:
+        - nl_langinfo(CODESET) contains /^utf-?8/i
+        - $ENV{LANGUAGE} contains /^utf-?8/i (only if using glibc)
+        - $ENV{LC_CALL} contains /^utf-?8/i
+        - $ENV{LC_CTYPE} contains /^utf-?8/i
+        - $ENV{LANG} contains /^utf-?8/i
+        If PL_wantutf8 is true, perl.c:S_parse_body()
+        will turn on the PerlIO :utf8 discipline on STDIN, STDOUT,
+        STDERR, _and_ the default open discipline.
+      */
         bool wantutf8 = FALSE;
         char *codeset = NULL;
 #if defined(HAS_NL_LANGINFO) && defined(CODESET)
@@ -481,6 +495,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
             (ibcmp(codeset,  "UTF-8", 5) == 0 ||
              ibcmp(codeset,  "UTF8",  4) == 0))
              wantutf8 = TRUE;
+#if defined(USE_LOCALE)
 #ifdef __GLIBC__
         if (!wantutf8 && language &&
             (ibcmp(language, "UTF-8", 5) == 0 ||
@@ -501,9 +516,11 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
             (ibcmp(lang,     "UTF-8", 5) == 0 ||
              ibcmp(lang,     "UTF8",  4) == 0))
              wantutf8 = TRUE;
+#endif /* USE_LOCALE */
         if (wantutf8)
              PL_wantutf8 = TRUE;
     }
+#endif
 
 #ifdef USE_LOCALE_CTYPE
     if (curctype != NULL)
@@ -559,7 +576,7 @@ Perl_mem_collxfrm(pTHX_ const char *s, STRLEN len, STRLEN *xlen)
            xused = strxfrm(xbuf + xout, s + xin, xAlloc - xout);
            if (xused == -1)
                goto bad;
-           if (xused < xAlloc - xout)
+           if ((STRLEN)xused < xAlloc - xout)
                break;
            xAlloc = (2 * xAlloc) + 1;
            Renew(xbuf, xAlloc, char);