This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "Upgrade Digest::SHA from version 5.88 to 5.91"
[perl5.git] / locale.c
index b8bfe4a..56cac85 100644 (file)
--- 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
@@ -1080,6 +1077,7 @@ S_is_cur_LC_category_utf8(pTHX_ int category)
                 Safefree(save_input_locale);
                 return is_utf8;
             }
+            Safefree(codeset);
         }
 
 #   endif
@@ -1112,7 +1110,7 @@ S_is_cur_LC_category_utf8(pTHX_ int category)
             (void) mbtowc(&wc, NULL, 0);    /* Reset any shift state */
             GCC_DIAG_RESTORE;
             errno = 0;
-            if (mbtowc(&wc, HYPHEN_UTF8, strlen(HYPHEN_UTF8))
+            if ((size_t)mbtowc(&wc, HYPHEN_UTF8, strlen(HYPHEN_UTF8))
                                                         != strlen(HYPHEN_UTF8)
                 || wc != (wchar_t) 0x2010)
             {
@@ -1184,20 +1182,20 @@ S_is_cur_LC_category_utf8(pTHX_ int category)
         && *(save_input_locale + final_pos - 3) == '5'
         && *(save_input_locale + final_pos - 4) == '6')
     {
-        Safefree(save_input_locale);
         DEBUG_L(PerlIO_printf(Perl_debug_log,
                         "Locale %s ends with 10056 in name, is UTF-8 locale\n",
                         save_input_locale));
+        Safefree(save_input_locale);
         return TRUE;
     }
 #endif
 
     /* Other common encodings are the ISO 8859 series, which aren't UTF-8 */
     if (instr(save_input_locale, "8859")) {
-        Safefree(save_input_locale);
         DEBUG_L(PerlIO_printf(Perl_debug_log,
                              "Locale %s has 8859 in name, not UTF-8 locale\n",
                              save_input_locale));
+        Safefree(save_input_locale);
         return FALSE;
     }