gdm r6066 - in trunk: . gui/simple-greeter



Author: halfline
Date: Wed Mar 26 04:30:39 2008
New Revision: 6066
URL: http://svn.gnome.org/viewvc/gdm?rev=6066&view=rev

Log:
2008-03-25  Ray Strode  <rstrode redhat com>

	* gui/simple-greeter/gdm-languages.c
	(add_locale), (collect_locales_from_archive),
	(collect_locales_from_directory):
	refactor common inner loop code between
	collect_locales_from_* to new add_locale function


Modified:
   trunk/ChangeLog
   trunk/gui/simple-greeter/gdm-languages.c

Modified: trunk/gui/simple-greeter/gdm-languages.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-languages.c	(original)
+++ trunk/gui/simple-greeter/gdm-languages.c	Wed Mar 26 04:30:39 2008
@@ -286,6 +286,56 @@
         return is_utf8;
 }
 
+static gboolean
+add_locale (const char *language_name)
+{
+        GdmLocale *locale;
+        GdmLocale *old_locale;
+        char      *name;
+
+        if (language_name_is_utf8 (language_name)) {
+                name = g_strdup (language_name);
+        } else {
+                name = g_strdup_printf ("%s.utf8", language_name);
+
+                if (!language_name_is_utf8 (name)) {
+                        g_free (name);
+                        return FALSE;
+                }
+        }
+
+        if (!language_name_is_valid (name)) {
+                g_free (name);
+                return FALSE;
+        }
+
+        locale = g_new0 (GdmLocale, 1);
+        gdm_parse_language_name (name,
+                                 &locale->language_code,
+                                 &locale->territory_code,
+                                 &locale->codeset,
+                                 &locale->modifier);
+        g_free (name);
+        name = NULL;
+
+        locale->id = construct_language_name (locale->language_code, locale->territory_code,
+                                              NULL, locale->modifier);
+        locale->name = construct_language_name (locale->language_code, locale->territory_code,
+                                                locale->codeset, locale->modifier);
+
+        old_locale = g_hash_table_lookup (gdm_available_locales_map, locale->id);
+        if (old_locale != NULL) {
+                if (strlen (old_locale->name) > strlen (locale->name)) {
+                        chooser_locale_free (locale);
+                        return FALSE;
+                }
+        }
+
+        g_hash_table_insert (gdm_available_locales_map, g_strdup (locale->id), locale);
+
+        return TRUE;
+}
+
 #ifdef GDM_GET_LOCALES_FROM_LIBC
 struct nameent
 {
@@ -339,40 +389,7 @@
         }
 
         for (cnt = 0; cnt < used; ++cnt) {
-                struct locrecent *locrec;
-                GdmLocale        *locale;
-                GdmLocale        *old_locale;
-
-                if (!language_name_is_valid (names[cnt].name) ||
-                    !language_name_is_utf8 (names[cnt].name)) {
-                        continue;
-                }
-
-                locale = g_new0 (GdmLocale, 1);
-
-                gdm_parse_language_name (names[cnt].name,
-                                         &locale->language_code,
-                                         &locale->territory_code,
-                                         &locale->codeset,
-                                         &locale->modifier);
-
-                locale->id = construct_language_name (locale->language_code, locale->territory_code,
-                                                      NULL, locale->modifier);
-                locale->name = construct_language_name (locale->language_code, locale->territory_code,
-                                                        locale->codeset, locale->modifier);
-
-                old_locale = g_hash_table_lookup (gdm_available_locales_map, locale->id);
-                if (old_locale != NULL) {
-                        if (strlen (old_locale->name) > strlen (locale->name)) {
-                                    chooser_locale_free (locale);
-                                    continue;
-                        }
-                }
-
-
-                locrec = (struct locrecent *) (addr + names[cnt].locrec_offset);
-
-                g_hash_table_insert (gdm_available_locales_map, g_strdup (locale->id), locale);
+                add_locale (names[cnt].name);
         }
 
         g_free (names);
@@ -425,48 +442,7 @@
         ndirents = scandir (GNOMELOCALEDIR, &dirents, select_dirs, alphasort);
 
         for (cnt = 0; cnt < ndirents; ++cnt) {
-                GdmLocale *locale;
-                GdmLocale *old_locale;
-                char      *name;
-
-                if (language_name_is_utf8 (dirents[cnt]->d_name)) {
-                        name = g_strdup (dirents[cnt]->d_name);
-                } else {
-                        name = g_strdup_printf ("%s.utf8", dirents[cnt]->d_name);
-
-                        if (!language_name_is_utf8 (name)) {
-                                g_free (name);
-                                continue;
-                        }
-                }
-
-                if (!language_name_is_valid (name)) {
-                        continue;
-                }
-
-                locale = g_new0 (GdmLocale, 1);
-                gdm_parse_language_name (name,
-                                         &locale->language_code,
-                                         &locale->territory_code,
-                                         &locale->codeset,
-                                         &locale->modifier);
-                g_free (name);
-                name = NULL;
-
-                locale->id = construct_language_name (locale->language_code, locale->territory_code,
-                                                      NULL, locale->modifier);
-                locale->name = construct_language_name (locale->language_code, locale->territory_code,
-                                                        locale->codeset, locale->modifier);
-
-                old_locale = g_hash_table_lookup (gdm_available_locales_map, locale->id);
-                if (old_locale != NULL) {
-                        if (strlen (old_locale->name) > strlen (locale->name)) {
-                                chooser_locale_free (locale);
-                                continue;
-                        }
-                }
-
-                g_hash_table_insert (gdm_available_locales_map, g_strdup (locale->id), locale);
+                add_locale (dirents[cnt]->d_name);
         }
 
         if (ndirents > 0) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]