diff options
author | Roland McGrath <roland@gnu.org> | 2002-10-11 07:22:18 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-10-11 07:22:18 +0000 |
commit | 679e4c434f755644cc2093c9940ac58d0c2b51cf (patch) | |
tree | 9b854f1c5d1bb85bdb6698b6051e77dfd877147e /locale/newlocale.c | |
parent | 704bb2fd8e613322b308ed53c98b3d0d1bd98526 (diff) | |
download | glibc-679e4c434f755644cc2093c9940ac58d0c2b51cf.tar glibc-679e4c434f755644cc2093c9940ac58d0c2b51cf.tar.gz glibc-679e4c434f755644cc2093c9940ac58d0c2b51cf.tar.bz2 glibc-679e4c434f755644cc2093c9940ac58d0c2b51cf.zip |
* locale/newlocale.c (__newlocale): If setting all categories to "C",
just return &_nl_C_locobj instead of copying it.
* locale/freelocale.c (__freelocale): Check for &_nl_C_locobj.
* locale/duplocale.c (__duplocale): Likewise.
2002-10-07 Roland McGrath <roland@frob.com>
* config.h.in (HAVE_I386_SET_GDT): New #undef.
* sysdeps/mach/configure.in: Define it with new check for i386_set_gdt.
* sysdeps/mach/configure: Regenerated.
2002-10-06 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h (INLINE_SYSCALL):
Add all necessary register outputs for syscall-clobbered registers.
2002-10-02 David Mosberger <davidm@hpl.hp.com>
* sysdeps/ia64/bzero.S: Rewritten by Sverre Jarp to tune for
Itanium 2 (and Itanium).
Fix unwind directives and make it fit in 80 columns.
* sysdeps/ia64/memset.S: Ditto.
* sysdeps/ia64/memcpy.S: Ditto.
Move jump table to .rodata section.
2002-10-03 Roland McGrath <roland@frob.com>
* sysdeps/mach/hurd/i386/init-first.c (_hurd_stack_setup): Add
clobbers to asm.
Diffstat (limited to 'locale/newlocale.c')
-rw-r--r-- | locale/newlocale.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/locale/newlocale.c b/locale/newlocale.c index 3b8676ceeb..1131f62c0b 100644 --- a/locale/newlocale.c +++ b/locale/newlocale.c @@ -60,6 +60,17 @@ __newlocale (int category_mask, const char *locale, __locale_t base) if (locale == NULL) ERROR_RETURN; + if (base == &_nl_C_locobj) + /* We're to modify BASE, returned for a previous call with "C". + We can't really modify the read-only structure, so instead + start over by copying it. */ + base = NULL; + + if ((base == NULL || category_mask == (1 << __LC_LAST) - 1 - (1 << LC_ALL)) + && (category_mask == 0 || !strcmp (locale, "C"))) + /* Asking for the "C" locale needn't allocate a new object. */ + return &_nl_C_locobj; + /* Allocate memory for the result. */ if (base != NULL) result = *base; |