summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2012-11-02 17:27:15 +0100
committerMichal Schmidt <mschmidt@redhat.com>2012-11-02 17:27:15 +0100
commit0901758558506273c0b7553dc3cae587f2b94290 (patch)
tree654ff82aa499e9113e8de546d8972ffd25ab1bac /src/shared
parent4940c64240541e91411620b7dc0963e012aa6b91 (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.c25
-rw-r--r--src/shared/util.h2
2 files changed, 27 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c
index 402b7caa3..3ac67505f 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 284035c33..b979b0e89 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);