search locale archive again after alias expansion
Carlos O'Donell
carlos@redhat.com
Fri Feb 20 20:19:00 GMT 2015
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.
More information about the Libc-alpha
mailing list