summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-02-25 21:49:04 +0000
committerRay Strode <halfline@src.gnome.org>2008-02-25 21:49:04 +0000
commit379a7fc8e25bad37002db696620f347d6741eba4 (patch)
tree839738aaf4f9a8b7d78ca37732a696cc58cba2e4
parent2f8e9eff16914b7c452b2193e7ef793abf761824 (diff)
downloadgdm-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--ChangeLog7
-rw-r--r--gui/simple-greeter/gdm-languages.c40
2 files changed, 47 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 34f7ec28..1f6f1be8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
{