Mercurial > hg > octave-nkf > gnulib-hg
changeset 12345:97d443c1572f
duplocale: Add support for glibc 2.3.x.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 23 Nov 2009 11:05:42 +0100 |
parents | 9f98da6e2275 |
children | 7839ef932c72 |
files | ChangeLog lib/duplocale.c |
diffstat | 2 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-11-23 Bruno Haible <bruno@clisp.org> + + duplocale: Add support for glibc 2.3.x. + * lib/duplocale.c (rpl_duplocale): Add fallback code for glibc 2.3.x. + 2009-11-22 Bruno Haible <bruno@clisp.org> vasnprintf: Tiny optimization.
--- a/lib/duplocale.c +++ b/lib/duplocale.c @@ -70,10 +70,16 @@ , { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK } #endif }; - const char *base_name = nl_langinfo (_NL_LOCALE_NAME (LC_CTYPE)); - locale_t base_copy = newlocale (LC_ALL_MASK, base_name, NULL); + const char *base_name; + locale_t base_copy; unsigned int i; + base_name = nl_langinfo (_NL_LOCALE_NAME (LC_CTYPE)); + if (base_name[0] == '\0') + /* Fallback code for glibc < 2.4, which did not implement + nl_langinfo (_NL_LOCALE_NAME (category)). */ + base_name = setlocale (LC_CTYPE, NULL); + base_copy = newlocale (LC_ALL_MASK, base_name, NULL); if (base_copy == NULL) return NULL; @@ -82,6 +88,10 @@ int category = categories[i].cat; int category_mask = categories[i].mask; const char *name = nl_langinfo (_NL_LOCALE_NAME (category)); + if (name[0] == '\0') + /* Fallback code for glibc < 2.4, which did not implement + nl_langinfo (_NL_LOCALE_NAME (category)). */ + name = setlocale (category, NULL); if (strcmp (name, base_name) != 0) { locale_t copy = newlocale (category_mask, name, base_copy);