diff options
author | Ray Strode <rstrode@redhat.com> | 2008-02-25 21:49:04 +0000 |
---|---|---|
committer | Ray Strode <halfline@src.gnome.org> | 2008-02-25 21:49:04 +0000 |
commit | 379a7fc8e25bad37002db696620f347d6741eba4 (patch) | |
tree | 839738aaf4f9a8b7d78ca37732a696cc58cba2e4 | |
parent | 2f8e9eff16914b7c452b2193e7ef793abf761824 (diff) | |
download | gdm-379a7fc8e25bad37002db696620f347d6741eba4.tar.gz |
new functions to check locale validity
2008-02-25 Ray Strode <rstrode@redhat.com>
* 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
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-languages.c | 40 |
2 files changed, 47 insertions, 0 deletions
@@ -1,5 +1,12 @@ 2008-02-25 Ray Strode <rstrode@redhat.com> + * 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 <rstrode@redhat.com> + * gui/simple-greeter/gdm-languages.c (chooser_locale_free): plug a small leak 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 <errno.h> #include <dirent.h> #include <locale.h> +#include <langinfo.h> #include <sys/stat.h> #include <glib.h> @@ -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) { |