20795N/A--- gdm-2.30.7/gui/simple-greeter/gdm-languages.c.org Tue Jul 12 13:40:00 2011
20795N/A+++ gdm-2.30.7/gui/simple-greeter/gdm-languages.c Tue Jul 12 15:48:26 2011
20795N/A@@ -27,6 +27,9 @@
20795N/A #include <stdio.h>
20795N/A #include <unistd.h>
20795N/A #include <string.h>
20795N/A+#if __sun
20795N/A+#include <strings.h>
20795N/A+#endif
20795N/A #include <errno.h>
20795N/A #include <dirent.h>
20795N/A #include <locale.h>
20795N/A@@ -147,7 +150,7 @@ gdm_parse_language_name (const char *nam
20788N/A
20788N/A if (!g_regex_match (re, name, 0, &match_info) ||
20788N/A g_match_info_is_partial_match (match_info)) {
20788N/A- g_warning ("locale %s isn't valid\n", name);
20813N/A+ g_debug ("locale %s isn't valid\n", name);
20788N/A goto out;
20788N/A }
20788N/A
20795N/A@@ -193,6 +196,12 @@ gdm_parse_language_name (const char *nam
20795N/A }
20795N/A }
20795N/A
20795N/A+ /*
20795N/A+ * While Solaris now supports locale aliases but we still prefer
20795N/A+ * unnormalized, canonical locale names. Hence, we do not normalize
20795N/A+ * codeset part of locale names.
20795N/A+ */
20795N/A+#ifndef __sun
20795N/A if (codesetp != NULL && *codesetp != NULL) {
20795N/A normalized_codeset = normalize_codeset (*codesetp);
20795N/A normalized_name = construct_language_name (language_codep ? *language_codep : NULL,
20795N/A@@ -208,6 +217,7 @@ gdm_parse_language_name (const char *nam
20795N/A }
20795N/A g_free (normalized_name);
20795N/A }
20795N/A+#endif
20795N/A
20795N/A out:
20795N/A g_match_info_free (match_info);
20795N/A@@ -357,9 +367,16 @@ out:
20795N/A return has_translations;
20795N/A }
20795N/A
20795N/A+#if __sun
20795N/A+static gboolean
20795N/A+add_locale (const char *language_name,
20795N/A+ gboolean utf8_only,
20795N/A+ gboolean verify_locale)
20795N/A+#else
20795N/A static gboolean
20795N/A add_locale (const char *language_name,
20795N/A gboolean utf8_only)
20795N/A+#endif
20795N/A {
20795N/A GdmLocale *locale;
20795N/A GdmLocale *old_locale;
20795N/A@@ -368,6 +385,13 @@ add_locale (const char *language_name,
20795N/A
20795N/A g_return_val_if_fail (language_name != NULL, FALSE);
20795N/A
20795N/A+#if __sun
20795N/A+ if (strstr(language_name, ".UTF-8") != NULL || !utf8_only) {
20795N/A+ name = g_strdup (language_name);
20795N/A+ } else {
20795N/A+ return FALSE;
20795N/A+ }
20795N/A+#else
20795N/A language_name_get_codeset_details (language_name, NULL, &is_utf8);
20795N/A
20795N/A if (is_utf8) {
20795N/A@@ -384,11 +408,21 @@ add_locale (const char *language_name,
20795N/A name = g_strdup (language_name);
20795N/A }
20795N/A
20795N/A+#endif
20795N/A+
20795N/A+#if __sun
20795N/A+ if (verify_locale && !language_name_is_valid (name)) {
20795N/A+ g_warning ("Your locale '%s' was failed by setlocale()", name);
20795N/A+ g_free (name);
20795N/A+ return FALSE;
20795N/A+ }
20795N/A+#else
20795N/A if (!language_name_is_valid (name)) {
20795N/A g_debug ("Ignoring '%s' as a locale, since it's invalid", name);
20795N/A g_free (name);
20795N/A return FALSE;
20795N/A }
20795N/A+#endif
20795N/A
20795N/A locale = g_new0 (GdmLocale, 1);
20795N/A gdm_parse_language_name (name,
20795N/A@@ -399,6 +433,13 @@ add_locale (const char *language_name,
20788N/A g_free (name);
20788N/A name = NULL;
20788N/A
20788N/A+#if __sun
20795N/A+ if (locale->language_code == NULL) {
20795N/A+ gdm_locale_free (locale);
20795N/A+ return FALSE;
20795N/A+ }
20788N/A+#endif
20788N/A+
20788N/A #ifdef WITH_INCOMPLETE_LOCALES
20788N/A if (utf8_only) {
20788N/A if (locale->territory_code == NULL || locale->modifier) {
20795N/A@@ -467,7 +508,7 @@ collect_locales_from_archive (void)
20788N/A if (mapped == NULL) {
20788N/A mapped = g_mapped_file_new (SYSTEM_ARCHIVE_FILE, FALSE, NULL);
20788N/A if (mapped == NULL) {
20788N/A- g_warning ("Mapping failed for %s: %s", ARCHIVE_FILE, error->message);
20788N/A+ g_debug ("Mapping failed for %s: %s", ARCHIVE_FILE, error->message);
20788N/A g_error_free (error);
20788N/A return FALSE;
20788N/A }
20795N/A@@ -498,7 +539,11 @@ collect_locales_from_archive (void)
20795N/A }
20795N/A
20795N/A for (cnt = 0; cnt < used; ++cnt) {
20795N/A+#if __sun
20795N/A+ add_locale (names[cnt].name, TRUE, TRUE);
20795N/A+#else
20795N/A add_locale (names[cnt].name, TRUE);
20795N/A+#endif
20795N/A }
20795N/A
20795N/A g_free (names);
20795N/A@@ -543,6 +588,19 @@ select_dirs (const struct dirent *dirent
20788N/A static void
20788N/A collect_locales_from_directory (void)
20788N/A {
20788N/A+#if __sun
20795N/A+ lclist_t *lclp;
20795N/A+ int count;
20795N/A+ int i;
20788N/A+
20795N/A+ count = localelist (&lclp, LCLIST_QUERY);
20788N/A+
20795N/A+ for (i = 0; i < count; i++) {
20795N/A+ add_locale (lclp[i].locale, TRUE, FALSE);
20795N/A+ }
20788N/A+
20795N/A+ localelistfree (lclp);
20788N/A+#else
20788N/A struct dirent **dirents;
20788N/A int ndirents;
20795N/A int cnt;
20795N/A@@ -556,6 +614,7 @@ collect_locales_from_directory (void)
20788N/A if (ndirents > 0) {
20788N/A free (dirents);
20788N/A }
20788N/A+#endif
20788N/A }
20788N/A
20788N/A static void
20795N/A@@ -601,9 +660,15 @@ collect_locales_from_locale_file (const
20795N/A
20795N/A lang = NULL;
20795N/A for (i = 0; lang_list[i] != NULL; i++) {
20795N/A+#if __sun
20795N/A+ if (add_locale (lang_list[i], FALSE, TRUE)) {
20795N/A+ break;
20795N/A+ }
20795N/A+#else
20795N/A if (add_locale (lang_list[i], FALSE)) {
20795N/A break;
20795N/A }
20795N/A+#endif
20795N/A }
20795N/A g_strfreev (lang_list);
20795N/A }
20795N/A@@ -706,7 +771,7 @@ get_translated_language (const char *cod
20788N/A }
20788N/A
20788N/A if (is_fallback_language (code)) {
20788N/A- name = g_strdup (_("Unspecified"));
20795N/A+ name = g_strdup (code);
20788N/A } else {
20788N/A translated_name = dgettext ("iso_639", language);
20788N/A name = get_first_item_in_semicolon_list (translated_name);
20795N/A@@ -1096,6 +1161,11 @@ gdm_get_language_from_name (const char *
20788N/A
20788N/A full_language = g_string_append (full_language, translated_language);
20788N/A
20795N/A+ if (strcmp (translated_language, "C") == 0 ||
20795N/A+ strcmp (translated_language, "POSIX") == 0) {
20795N/A+ goto out;
20795N/A+ }
20788N/A+
20788N/A if (territory_code != NULL) {
20788N/A translated_territory = get_translated_territory (territory_code, locale);
20788N/A }