1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-10 16:58:28 +03:00

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.
This commit is contained in:
Harald Hoyer 2013-06-27 11:26:36 +02:00 committed by Lennart Poettering
parent e7256c5c13
commit 6cf2f1d94d

View 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) {