]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
BZ #15969: search locale archive again after alias expansion
authorAlexandre Oliva <aoliva@redhat.com>
Tue, 18 Nov 2014 00:00:58 +0000 (22:00 -0200)
committerAlexandre Oliva <aoliva@redhat.com>
Thu, 26 Feb 2015 05:16:51 +0000 (02:16 -0300)
If a locale alias is defined in locale.alias but not in an archive,
and the referenced locale is only present in the archive, setlocale
will fail if given the alias name.  This is unintuitive.  This patch
fixes it, arranging for the locale archive to be searched again after
alias expansion.

for  ChangeLog

[BZ #15969]
* locale/findlocale.c (_nl_find_locale): Retry archive search
after alias expansion.

ChangeLog
NEWS
locale/findlocale.c

index dd590b06ea7f46db7cd6de0daf5e6c8164dbf271..0d7cf377acd3c6486ce86d2420259ac1c42d9a60 100644 (file)
--- 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 72c685f756b5df343b80fc14278883c8f59e9714..db6c5f122c73459348ee9141b4efc805f411cfcf 100644 (file)
--- 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
index ab879d7775a66626464cf71f25fda97289dc2965..360f58b904dfc7835c3d6e70cd4dc2ef2e729178 100644 (file)
@@ -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;