about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--NEWS8
-rw-r--r--locale/findlocale.c19
3 files changed, 25 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index dd590b06ea..0d7cf377ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-26  Alexandre Oliva <aoliva@redhat.com>
+
+	[BZ #15969]
+	* locale/findlocale.c (_nl_find_locale): Retry archive search
+	after alias expansion.
+
 2015-02-25  Roland McGrath  <roland@hack.frob.com>
 
 	* iconv/tst-iconv3.c (main): Converted to ...
diff --git a/NEWS b/NEWS
index 72c685f756..db6c5f122c 100644
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,10 @@ Version 2.22
 
 * The following bugs are resolved with this release:
 
-  4719, 14841, 13064, 14094, 15319, 15467, 15790, 16560, 16783, 17269,
-  17523, 17569, 17588, 17792, 17836, 17912, 17916, 17932, 17944, 17949,
-  17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998, 17999,
-  18019, 18020.
+  4719, 14841, 13064, 14094, 15319, 15467, 15790, 15969, 16560, 16783,
+  17269, 17523, 17569, 17588, 17792, 17836, 17912, 17916, 17932, 17944,
+  17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998,
+  17999, 18019, 18020.
 
 * Character encoding and ctype tables were updated to Unicode 7.0.0, using
   new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red
diff --git a/locale/findlocale.c b/locale/findlocale.c
index ab879d7775..360f58b904 100644
--- a/locale/findlocale.c
+++ b/locale/findlocale.c
@@ -156,15 +156,26 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
       if (__glibc_likely (data != NULL))
 	return data;
 
+      /* Nothing in the archive with the given name.  Expanding it as
+	 an alias and retry.  */
+      loc_name = (char *) _nl_expand_alias (*name);
+      if (loc_name != NULL)
+	{
+	  data = _nl_load_locale_from_archive (category, &loc_name);
+	  if (__builtin_expect (data != NULL, 1))
+	    return data;
+	}
+
       /* Nothing in the archive.  Set the default path to search below.  */
       locale_path = _nl_default_locale_path;
       locale_path_len = sizeof _nl_default_locale_path;
     }
+  else
+    /* We really have to load some data.  First see whether the name is
+       an alias.  Please note that this makes it impossible to have "C"
+       or "POSIX" as aliases.  */
+    loc_name = (char *) _nl_expand_alias (*name);
 
-  /* We really have to load some data.  First see whether the name is
-     an alias.  Please note that this makes it impossible to have "C"
-     or "POSIX" as aliases.  */
-  loc_name = (char *) _nl_expand_alias (*name);
   if (loc_name == NULL)
     /* It is no alias.  */
     loc_name = (char *) *name;