From 379a7fc8e25bad37002db696620f347d6741eba4 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 25 Feb 2008 21:49:04 +0000 Subject: new functions to check locale validity 2008-02-25 Ray Strode * gui/simple-greeter/gdm-languages.c: (language_name_is_valid), (language_name_is_utf8): new functions to check locale validity svn path=/trunk/; revision=5864 --- ChangeLog | 7 +++++++ gui/simple-greeter/gdm-languages.c | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/ChangeLog b/ChangeLog index 34f7ec28..1f6f1be8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-02-25 Ray Strode + + * gui/simple-greeter/gdm-languages.c: + (language_name_is_valid), + (language_name_is_utf8): + new functions to check locale validity + 2008-02-25 Ray Strode * gui/simple-greeter/gdm-languages.c diff --git a/gui/simple-greeter/gdm-languages.c b/gui/simple-greeter/gdm-languages.c index 7084ad22..c826e792 100644 --- a/gui/simple-greeter/gdm-languages.c +++ b/gui/simple-greeter/gdm-languages.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -314,6 +315,45 @@ nameentcmp (const void *a, const void *b) ((const struct nameent *) b)->name); } +static gboolean +language_name_is_valid (const char *language_name) +{ + char *old_locale; + gboolean is_valid; + + old_locale = g_strdup (setlocale (LC_MESSAGES, NULL)); + is_valid = setlocale (LC_MESSAGES, language_name) != NULL; + setlocale (LC_MESSAGES, old_locale); + g_free (old_locale); + + return is_valid; +} + +static gboolean +language_name_is_utf8 (const char *language_name) +{ + char *old_locale; + char *codeset; + gboolean is_utf8; + + old_locale = g_strdup (setlocale (LC_CTYPE, NULL)); + + if (setlocale (LC_CTYPE, language_name) == NULL) { + g_free (old_locale); + return FALSE; + } + + codeset = normalize_codeset (nl_langinfo (CODESET)); + + is_utf8 = strcmp (codeset, "utf8") == 0; + g_free (codeset); + + setlocale (LC_CTYPE, old_locale); + g_free (old_locale); + + return is_utf8; +} + static void collect_locales_from_archive (void) { -- cgit v1.2.1