summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Hoyer <harald@redhat.com>2013-06-27 11:26:36 +0200
committerLennart Poettering <lennart@poettering.net>2013-07-16 19:03:23 +0200
commit6cf2f1d94dc7749bcdff5385838bdc8eba9c3001 (patch)
tree3709b5bf7215c631cd2ce0da69580309d5d1fc6c
parente7256c5c137e58fb3dc1ebca8e5845733a5f733c (diff)
util.c:is_locale_utf8(): check, if "C" was set on purpose
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.
-rw-r--r--src/shared/util.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 19ca8ad135..15abd5046d 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -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) {