diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 8 | ||||
-rw-r--r-- | locale/findlocale.c | 19 |
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; |