unicode: check $LC_ALL to detect Unicode mode, not only $LANG
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 2 Jul 2013 15:30:23 +0000 (17:30 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 2 Jul 2013 15:30:23 +0000 (17:30 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/unicode.c
shell/ash.c
shell/hush.c

index 99dc1df..c1e3966 100644 (file)
@@ -39,8 +39,11 @@ void FAST_FUNC reinit_unicode(const char *LANG)
 
 void FAST_FUNC init_unicode(void)
 {
-       if (unicode_status == UNICODE_UNKNOWN)
-               reinit_unicode(getenv("LANG"));
+       if (unicode_status == UNICODE_UNKNOWN) {
+               char *s = getenv("LC_ALL");
+               if (!s) s = getenv("LANG");
+               reinit_unicode(s);
+       }
 }
 
 #else
@@ -58,8 +61,11 @@ void FAST_FUNC reinit_unicode(const char *LANG)
 
 void FAST_FUNC init_unicode(void)
 {
-       if (unicode_status == UNICODE_UNKNOWN)
-               reinit_unicode(getenv("LANG"));
+       if (unicode_status == UNICODE_UNKNOWN) {
+               char *s = getenv("LC_ALL");
+               if (!s) s = getenv("LANG");
+               reinit_unicode(s);
+       }
 }
 # endif
 
index 6af14f5..90f2224 100644 (file)
@@ -9657,7 +9657,11 @@ preadfd(void)
                 * _during_ shell execution, not only if it was set when
                 * shell was started. Therefore, re-check LANG every time:
                 */
-               reinit_unicode(lookupvar("LANG"));
+               {
+                       const char *s = lookupvar("LC_ALL");
+                       if (!s) s = lookupvar("LANG");
+                       reinit_unicode(s);
+               }
                nr = read_line_input(line_input_state, cmdedit_prompt, buf, IBUFSIZ, timeout);
                if (nr == 0) {
                        /* Ctrl+C pressed */
index 1a2603e..1fa84dc 100644 (file)
@@ -2044,7 +2044,9 @@ static void get_user_input(struct in_str *i)
                 * _during_ shell execution, not only if it was set when
                 * shell was started. Therefore, re-check LANG every time:
                 */
-               reinit_unicode(get_local_var_value("LANG"));
+               const char *s = get_local_var_value("LC_ALL");
+               if (!s) s = get_local_var_value("LANG");
+               reinit_unicode(s);
 
                G.flag_SIGINT = 0;
                /* buglet: SIGINT will not make new prompt to appear _at once_,