This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: search locale archive again after alias expansion


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]