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.
54 lines
1.9 KiB
54 lines
1.9 KiB
7 years ago
|
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;
|