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: "Carlos O'Donell" <carlos at redhat dot com>
- To: Alexandre Oliva <aoliva at redhat dot com>, Roland McGrath <roland at hack dot frob dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Fri, 20 Feb 2015 15:19:29 -0500
- 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> <oregr8db48 dot fsf at livre dot home>
On 01/05/2015 07:08 PM, Alexandre Oliva wrote:
>> Ping?
>> https://sourceware.org/ml/libc-alpha/2013-09/msg00566.html
>
> Ping? I enclose the entire patch below, for patchwork. (thanks, Joseph)
This showed up on my query specifically because it was in patchwork :-)
I fully agree that this the right solution. The alias should be converted
to the real locale and then looked up again in the dataase.
A shame that we lack the ability to test this given the existing test
infrastructure, otherwise I'd ask for a test case.
> for ChangeLog
>
> [BZ #15969]
> * locale/findlocale.c (_nl_find_locale): Retry archive search
> after alias expansion.
> * NEWS: Updated.
OK to checkin.
> ---
> 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;
> + }
OK.
> +
> /* 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);
OK.
>
> - /* 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;
>
>
Cheers,
Carlos.