Handle LC_GLOBAL_LOCALE in duplocale.

This commit is contained in:
Ulrich Drepper 2009-11-17 09:37:31 -08:00
parent 4fb9241e4e
commit 7443244740
3 changed files with 11 additions and 2 deletions

View File

@ -1,5 +1,10 @@
2009-11-17 Ulrich Drepper <drepper@redhat.com> 2009-11-17 Ulrich Drepper <drepper@redhat.com>
[BZ #10969]
* locale/duplocale.c (__duplocale): Handle LC_GLOBAL_LOCALE special.
* locale/tst-duplocale.c: New file.
* locale/Makefile (tests): Add tst-duplocale.
[BZ #10968] [BZ #10968]
* locale/langinfo.h (_NL_LOCALE_NAME): Correct definition. * locale/langinfo.h (_NL_LOCALE_NAME): Correct definition.
Patch by Bruno Haible <bruno@clisp.org>. Patch by Bruno Haible <bruno@clisp.org>.

View File

@ -38,7 +38,7 @@ distribute = localeinfo.h categories.def iso-639.def iso-3166.def \
routines = setlocale findlocale loadlocale loadarchive \ routines = setlocale findlocale loadlocale loadarchive \
localeconv nl_langinfo nl_langinfo_l mb_cur_max \ localeconv nl_langinfo nl_langinfo_l mb_cur_max \
newlocale duplocale freelocale uselocale newlocale duplocale freelocale uselocale
tests = tst-C-locale tst-locname tests = tst-C-locale tst-locname tst-duplocale
categories = ctype messages monetary numeric time paper name \ categories = ctype messages monetary numeric time paper name \
address telephone measurement identification collate address telephone measurement identification collate
aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \ aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \

View File

@ -1,5 +1,5 @@
/* Duplicate handle for selection of locales. /* Duplicate handle for selection of locales.
Copyright (C) 1997,2000,2001,2002,2005,2008 Free Software Foundation, Inc. Copyright (C) 1997,2000-2002,2005,2008,2009 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -37,6 +37,10 @@ __duplocale (__locale_t dataset)
if (dataset == _nl_C_locobj_ptr) if (dataset == _nl_C_locobj_ptr)
return dataset; return dataset;
/* Handle a special value. */
if (dataset == LC_GLOBAL_LOCALE)
dataset = &_nl_global_locale;
__locale_t result; __locale_t result;
int cnt; int cnt;
size_t names_len = 0; size_t names_len = 0;