You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.9 KiB
53 lines
1.9 KiB
commit 0d822a016b631aef409df5805f58962fe5bbcdc5 |
|
Author: Alexandre Oliva <aoliva@redhat.com> |
|
Date: Mon Nov 17 22:00:58 2014 -0200 |
|
|
|
BZ #15969: search locale archive again after alias expansion |
|
|
|
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. |
|
|
|
Index: b/locale/findlocale.c |
|
=================================================================== |
|
--- a/locale/findlocale.c |
|
+++ b/locale/findlocale.c |
|
@@ -156,15 +156,26 @@ _nl_find_locale (const char *locale_path |
|
if (__builtin_expect (data != NULL, 1)) |
|
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;
|
|
|