From 5db915715f800d0858346bfbb5eea6aff4287ebd Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 14 Aug 2001 23:29:55 +0000 Subject: Update. 2001-08-14 Jakub Jelinek * resolv/nss_dns/dns-host.c (RESOLVSORT): Define. (addrsort): New function. * resolv/gethnamaddr.c (RESOLVSORT): Define. 2001-08-14 Jakub Jelinek * string/strsignal.c (free_mem): Remove. 2001-08-14 Andreas Jaeger * inet/inet_ntoa.c (free_mem): Remove, it's not used anymore. Closes PR libc/2477, reported by Dylan Alex Simon . 2001-08-14 Ulrich Drepper * locale/Makefile (aux): Add xlocale. * locale/xlocale.c: New file. * include/locale.c (_nl_C_locobj): Declare. * iconv/gconv_charset.h: Use __tolower_l, __isdigit_l, __isspace_l with _nl_C_locobj instead of tolower, isdigit, isspace. * iconv/gconv_conf.c: Likewise. * iconv/gconv_int.h: Likewise. * iconv/gconv_open.c: Likewise. * locale/newlocale.c: Minor cleanups. --- locale/Makefile | 3 ++- locale/newlocale.c | 6 ++++-- locale/xlocale.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 locale/xlocale.c (limited to 'locale') diff --git a/locale/Makefile b/locale/Makefile index aba8bcd94a..03ed1b66fa 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -40,7 +40,8 @@ routines = setlocale findlocale loadlocale localeconv nl_langinfo \ tests = tst-C-locale categories = ctype messages monetary numeric time paper name \ address telephone measurement identification collate -aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name +aux = $(categories:%=lc-%) $(categories:%=C-%) SYS_libc C_name \ + xlocale others = localedef locale #others-static = localedef locale install-bin = localedef locale diff --git a/locale/newlocale.c b/locale/newlocale.c index 19e65e29f2..4a785d0c0f 100644 --- a/locale/newlocale.c +++ b/locale/newlocale.c @@ -163,10 +163,12 @@ __newlocale (int category_mask, const char *locale, __locale_t base) if (result_ptr == NULL) return NULL; - *result_ptr = result; } else - *(result_ptr = base) = result; + /* We modify the base structure. */ + result_ptr = base; + + *result_ptr = result; /* Update the special members. */ update: diff --git a/locale/xlocale.c b/locale/xlocale.c new file mode 100644 index 0000000000..dd1dbbf508 --- /dev/null +++ b/locale/xlocale.c @@ -0,0 +1,55 @@ +/* C locale object. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include "localeinfo.h" + +#define DEFINE_CATEGORY(category, category_name, items, a) \ +extern struct locale_data _nl_C_##category; +#include "categories.def" +#undef DEFINE_CATEGORY + +/* Defined in locale/C-ctype.c. */ +extern const char _nl_C_LC_CTYPE_class[]; +extern const char _nl_C_LC_CTYPE_toupper[]; +extern const char _nl_C_LC_CTYPE_tolower[]; + + +struct __locale_struct _nl_C_locobj = + { + .__locales = + { + [LC_CTYPE] = &_nl_C_LC_CTYPE, + [LC_NUMERIC] = &_nl_C_LC_NUMERIC, + [LC_TIME] = &_nl_C_LC_TIME, + [LC_COLLATE] = &_nl_C_LC_COLLATE, + [LC_MONETARY] = &_nl_C_LC_MONETARY, + [LC_MESSAGES] = &_nl_C_LC_MESSAGES, + [LC_PAPER] = &_nl_C_LC_PAPER, + [LC_NAME] = &_nl_C_LC_NAME, + [LC_ADDRESS] = &_nl_C_LC_ADDRESS, + [LC_TELEPHONE] = &_nl_C_LC_TELEPHONE, + [LC_MEASUREMENT] = &_nl_C_LC_MEASUREMENT, + [LC_IDENTIFICATION] = &_nl_C_LC_IDENTIFICATION + }, + .__ctype_b = (const unsigned short int *) _nl_C_LC_CTYPE_class + 128, + .__ctype_tolower = (const int *) _nl_C_LC_CTYPE_tolower + 128, + .__ctype_toupper = (const int *) _nl_C_LC_CTYPE_toupper + 128 + }; -- cgit v1.2.3