chiark / gitweb /
util.c:is_locale_utf8(): check, if "C" was set on purpose
authorHarald Hoyer <harald@redhat.com>
Thu, 27 Jun 2013 09:26:36 +0000 (11:26 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 16 Jul 2013 17:03:23 +0000 (19:03 +0200)
If you have a ASCII only terminal, there is no way to set the charmap to
ANSI_X3.4-1968, other than using LC_CTYPE=C.

We don't want to assume a UTF-8 capable terminal in this case and only
do so, if LANG, LC_ALL and LC_CTYPE are unset.

src/shared/util.c

index 19ca8ad1358f68f5733cdea1d1a9ec4855f122d2..15abd5046d72e160e1cbf6a25254c8ec16a17679 100644 (file)
@@ -5420,20 +5420,24 @@ bool is_locale_utf8(void) {
                 goto out;
         }
 
-        /* For LC_CTYPE=="C" return true,
-         * because CTYPE is effectly unset and
-         * everything defaults to UTF-8 nowadays. */
-
+        /* For LC_CTYPE=="C" return true, because CTYPE is effectly
+         * unset and everything can do to UTF-8 nowadays. */
         set = setlocale(LC_CTYPE, NULL);
         if (!set) {
                 cached_answer = true;
                 goto out;
         }
 
-        cached_answer = streq(set, "C");
+        /* Check result, but ignore the result if C was set
+         * explicitly. */
+        cached_answer =
+                streq(set, "C") &&
+                !getenv("LC_ALL") &&
+                !getenv("LC_CTYPE") &&
+                !getenv("LANG");
 
 out:
-        return (bool)cached_answer;
+        return (bool) cached_answer;
 }
 
 const char *draw_special_char(DrawSpecialChar ch) {