This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: search locale archive again after alias expansion
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Mon, 05 Jan 2015 22:08:23 -0200
- Subject: Re: search locale archive again after alias expansion
- Authentication-results: sourceware.org; auth=none
- References: <orr4dao5h6 dot fsf at livre dot home> <20130918220004 dot B23492C09F at topped-with-meat dot com> <ory56t31yv dot fsf at livre dot home> <or8uigyac8 dot fsf at free dot home>
On Dec 9, 2014, Alexandre Oliva <aoliva@redhat.com> wrote:
> On Sep 19, 2013, Alexandre Oliva <aoliva@redhat.com> wrote:
>> 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.
>> * NEWS: Updated.
> Ping?
> https://sourceware.org/ml/libc-alpha/2013-09/msg00566.html
Ping? I enclose the entire patch below, for patchwork. (thanks, Joseph)
for ChangeLog
[BZ #15969]
* locale/findlocale.c (_nl_find_locale): Retry archive search
after alias expansion.
* NEWS: Updated.
---
locale/findlocale.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/locale/findlocale.c b/locale/findlocale.c
index 22e8b53..dab155a 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;
--
Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/ FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer