diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2012-11-02 17:27:15 +0100 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2012-11-02 17:27:15 +0100 |
commit | 0901758558506273c0b7553dc3cae587f2b94290 (patch) | |
tree | 654ff82aa499e9113e8de546d8972ffd25ab1bac /src/shared | |
parent | 4940c64240541e91411620b7dc0963e012aa6b91 (diff) |
util: add is_locale_utf8()
journalctl and vconsole-setup both implement utf8 locale detection.
Let's have a common function for it.
The next patch will add another use.
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util.c | 25 | ||||
-rw-r--r-- | src/shared/util.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index 402b7caa3f..3ac67505f0 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -57,6 +57,8 @@ #include <sys/vfs.h> #include <linux/magic.h> #include <limits.h> +#include <langinfo.h> +#include <locale.h> #include "macro.h" #include "util.h" @@ -6115,3 +6117,26 @@ void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, } return NULL; } + +bool is_locale_utf8(void) { + const char *set; + static int cached_answer = -1; + + if (cached_answer >= 0) + goto out; + + if (!setlocale(LC_ALL, "")) { + cached_answer = true; + goto out; + } + + set = nl_langinfo(CODESET); + if (!set) { + cached_answer = true; + goto out; + } + + cached_answer = streq(set, "UTF-8"); +out: + return (bool)cached_answer; +} diff --git a/src/shared/util.h b/src/shared/util.h index 284035c33b..b979b0e89f 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -598,3 +598,5 @@ int parse_timestamp(const char *t, usec_t *usec); void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *, void *), void *arg); + +bool is_locale_utf8(void); |