diff options
Diffstat (limited to 'wcsmbs')
-rw-r--r-- | wcsmbs/Makefile | 11 | ||||
-rw-r--r-- | wcsmbs/wchar.h | 60 | ||||
-rw-r--r-- | wcsmbs/wcscasecmp.c | 27 | ||||
-rw-r--r-- | wcsmbs/wcscasecmp_l.c | 21 | ||||
-rw-r--r-- | wcsmbs/wcsncase.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcsncase_l.c | 21 | ||||
-rw-r--r-- | wcsmbs/wcstod_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstof.c | 8 | ||||
-rw-r--r-- | wcsmbs/wcstof_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstol_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstold.c | 6 | ||||
-rw-r--r-- | wcsmbs/wcstold_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstoll_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstoul_l.c | 29 | ||||
-rw-r--r-- | wcsmbs/wcstoull_l.c | 30 |
15 files changed, 373 insertions, 14 deletions
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index 76f0fd03b9..e39ba61684 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -31,10 +31,12 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \ mbrlen mbrtowc wcrtomb mbsrtowcs wcsrtombs \ mbsnrtowcs wcsnrtombs \ wcstol wcstoul wcstoll wcstoull wcstod wcstold wcstof \ + wcstol_l wcstoul_l wcstoll_l wcstoull_l \ + wcstod_l wcstold_l wcstof_l \ wcscoll wcsxfrm \ wcwidth wcswidth \ wcscoll_l wcsxfrm_l \ - wcscasecmp wcsncase + wcscasecmp wcsncase wcscasecmp_l wcsncase_l include ../Rules @@ -48,3 +50,10 @@ CFLAGS-wcstoull.c = -I../stdlib CFLAGS-wcstod.c = -I../stdlib CFLAGS-wcstold.c = -I../stdlib CFLAGS-wcstof.c = -I../stdlib +CFLAGS-wcstol_l.c = -I../stdlib +CFLAGS-wcstoul_l.c = -I../stdlib +CFLAGS-wcstoll_l.c = -I../stdlib +CFLAGS-wcstoull_l.c = -I../stdlib +CFLAGS-wcstod_l.c = -I../stdlib +CFLAGS-wcstold_l.c = -I../stdlib +CFLAGS-wcstof_l.c = -I../stdlib diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h index 5247a866d3..d74a1bc492 100644 --- a/wcsmbs/wchar.h +++ b/wcsmbs/wchar.h @@ -93,6 +93,16 @@ extern int __wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)); extern int wcsncasecmp __P ((__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)); + +/* Similar to the two functions above but take the information from + the provided locale and not the global locale. */ +# include <xlocale.h> + +extern int __wcscasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2, + __locale_t __loc)); + +extern int __wcsncasecmp_l __P ((__const wchar_t *__s1, __const wchar_t *__s2, + size_t __n, __locale_t __loc)); #endif /* Compare S1 and S2, both interpreted as appropriate to the @@ -107,7 +117,6 @@ extern size_t wcsxfrm __P ((wchar_t *__restrict __s1, #ifdef __USE_GNU /* Similar to the two functions above but take the information from the provided locale and not the global locale. */ -# include <xlocale.h> /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the given locale. */ @@ -316,6 +325,55 @@ extern unsigned long long int wcstoull __P ((__const wchar_t * int __base)); #endif /* ISO C 9X or GCC and GNU. */ +#ifdef __USE_GNU +/* The concept of one static locale per category is not very well + thought out. Many applications will need to process its data using + information from several different locales. Another application is + the implementation of the internationalization handling in the + upcoming ISO C++ standard library. To support this another set of + the functions using locale data exist which have an additional + argument. + + Attention: all these functions are *not* standardized in any form. + This is a proof-of-concept implementation. */ + +/* Structure for reentrant locale using functions. This is an + (almost) opaque type for the user level programs. */ +# include <xlocale.h> + +/* Special versions of the functions above which take the locale to + use as an additional parameter. */ +extern long int __wcstol_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __base, + __locale_t __loc)); + +extern unsigned long int __wcstoul_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, __locale_t __loc)); + +extern long long int __wcstoll_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, __locale_t __loc)); + +extern unsigned long long int __wcstoull_l __P ((__const wchar_t *__restrict + __nptr, + wchar_t **__restrict __endptr, + int __base, + __locale_t __loc)); + +extern double __wcstod_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + __locale_t __loc)); + +extern float __wcstof_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + __locale_t __loc)); + +extern __long_double_t __wcstold_l __P ((__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + __locale_t __loc)); +#endif /* GNU */ + /* The internal entry points for `wcstoX' take an extra flag argument saying whether or not to parse locale-dependent number grouping. */ diff --git a/wcsmbs/wcscasecmp.c b/wcsmbs/wcscasecmp.c index 74908229a0..f32b4a14d2 100644 --- a/wcsmbs/wcscasecmp.c +++ b/wcsmbs/wcscasecmp.c @@ -25,15 +25,32 @@ #ifndef weak_alias # define __wcscasecmp wcscasecmp +# define TOLOWER(Ch) towlower (Ch) +#else +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define __wcscasecmp __wcscasecmp_l +# define TOLOWER(Ch) __towlower_l ((Ch), loc) +# else +# define TOLOWER(Ch) towlower (Ch) +# endif +#endif + +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_DECL __locale_t loc; +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_DECL #endif /* Compare S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ int -__wcscasecmp (s1, s2) +__wcscasecmp (s1, s2 LOCALE_PARAM) const wchar_t *s1; const wchar_t *s2; + LOCALE_PARAM_DECL { wint_t c1, c2; @@ -42,15 +59,15 @@ __wcscasecmp (s1, s2) do { - c1 = towlower (*s1++); - c2 = towlower (*s2++); - if (c1 == '\0') + c1 = TOLOWER (*s1++); + c2 = TOLOWER (*s2++); + if (c1 == L'\0') break; } while (c1 == c2); return c1 - c2; } -#ifdef weak_alias +#ifndef __wcscasecmp weak_alias (__wcscasecmp, wcscasecmp) #endif diff --git a/wcsmbs/wcscasecmp_l.c b/wcsmbs/wcscasecmp_l.c new file mode 100644 index 0000000000..1f6a0e909c --- /dev/null +++ b/wcsmbs/wcscasecmp_l.c @@ -0,0 +1,21 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 +#include <wcscasecmp.c> diff --git a/wcsmbs/wcsncase.c b/wcsmbs/wcsncase.c index c5b10c57a4..0f1dce261b 100644 --- a/wcsmbs/wcsncase.c +++ b/wcsmbs/wcsncase.c @@ -18,11 +18,31 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + #include <wchar.h> #include <wctype.h> #ifndef weak_alias # define __wcsncasecmp wcsncasecmp +# define TOLOWER(Ch) towlower (Ch) +#else +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define __wcsncasecmp __wcsncasecmp_l +# define TOLOWER(Ch) __towlower_l ((Ch), loc) +# else +# define TOLOWER(Ch) towlower (Ch) +# endif +#endif + +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_DECL __locale_t loc; +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_DECL #endif /* Compare no more than N wide characters of S1 and S2, @@ -30,10 +50,11 @@ greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ int -__wcsncasecmp (s1, s2, n) +__wcsncasecmp (s1, s2, n LOCALE_PARAM) const wchar_t *s1; const wchar_t *s2; size_t n; + LOCALE_PARAM_DECL { wint_t c1, c2; @@ -42,14 +63,14 @@ __wcsncasecmp (s1, s2, n) do { - c1 = (wint_t) towlower (*s1++); - c2 = (wint_t) towlower (*s2++); + c1 = (wint_t) TOLOWER (*s1++); + c2 = (wint_t) TOLOWER (*s2++); if (c1 == L'\0' || c1 != c2) return c1 - c2; } while (--n > 0); return c1 - c2; } -#ifdef weak_alias +#ifndef __wcsncasecmp weak_alias (__wcsncasecmp, wcsncasecmp) #endif diff --git a/wcsmbs/wcsncase_l.c b/wcsmbs/wcsncase_l.c new file mode 100644 index 0000000000..76e8cac947 --- /dev/null +++ b/wcsmbs/wcsncase_l.c @@ -0,0 +1,21 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 +#include <wcsncase.c> diff --git a/wcsmbs/wcstod_l.c b/wcsmbs/wcstod_l.c new file mode 100644 index 0000000000..b5a715bdbd --- /dev/null +++ b/wcsmbs/wcstod_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int, + __locale_t); + +#include <wcstod.c> diff --git a/wcsmbs/wcstof.c b/wcsmbs/wcstof.c index f410e4cf32..38cd95a4e1 100644 --- a/wcsmbs/wcstof.c +++ b/wcsmbs/wcstof.c @@ -22,8 +22,12 @@ These macros tell it to produce the `float' version, `wcstof'. */ #define FLOAT float -#define FLT LDBL -#define STRTOF wcstof +#define FLT FLT +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define STRTOF __wcstof_l +#else +# define STRTOF wcstof +#endif #define MPN2FLOAT __mpn_construct_float #define FLOAT_HUGE_VAL HUGE_VALF #define USE_WIDE_CHAR 1 diff --git a/wcsmbs/wcstof_l.c b/wcsmbs/wcstof_l.c new file mode 100644 index 0000000000..13d4c10914 --- /dev/null +++ b/wcsmbs/wcstof_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int, + __locale_t); + +#include <wcstof.c> diff --git a/wcsmbs/wcstol_l.c b/wcsmbs/wcstol_l.c new file mode 100644 index 0000000000..5d8fdb06af --- /dev/null +++ b/wcsmbs/wcstol_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern long int ____wcstol_l_internal (const wchar_t *, wchar_t **, int, int, + __locale_t); + +#include <wcstol.c> diff --git a/wcsmbs/wcstold.c b/wcsmbs/wcstold.c index 1a3f0d2c6e..1c7cc6527f 100644 --- a/wcsmbs/wcstold.c +++ b/wcsmbs/wcstold.c @@ -23,7 +23,11 @@ #define FLOAT long double #define FLT LDBL -#define STRTOF wcstold +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define STRTOF __wcstold_l +#else +# define STRTOF wcstold +#endif #define MPN2FLOAT __mpn_construct_long_double #define FLOAT_HUGE_VAL HUGE_VALL #define USE_WIDE_CHAR 1 diff --git a/wcsmbs/wcstold_l.c b/wcsmbs/wcstold_l.c new file mode 100644 index 0000000000..20a2228ba7 --- /dev/null +++ b/wcsmbs/wcstold_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int, + __locale_t); + +#include <wcstold.c> diff --git a/wcsmbs/wcstoll_l.c b/wcsmbs/wcstoll_l.c new file mode 100644 index 0000000000..12a8c2d669 --- /dev/null +++ b/wcsmbs/wcstoll_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern long long int ____wcstoll_l_internal (const wchar_t *, wchar_t **, + int, int, __locale_t); + +#include <wcstoll.c> diff --git a/wcsmbs/wcstoul_l.c b/wcsmbs/wcstoul_l.c new file mode 100644 index 0000000000..852d930bb0 --- /dev/null +++ b/wcsmbs/wcstoul_l.c @@ -0,0 +1,29 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern unsigned long int ____wcstoul_l_internal (const wchar_t *, wchar_t **, + int, int, __locale_t); + +#include <wcstoul.c> diff --git a/wcsmbs/wcstoull_l.c b/wcsmbs/wcstoull_l.c new file mode 100644 index 0000000000..c849a31f3d --- /dev/null +++ b/wcsmbs/wcstoull_l.c @@ -0,0 +1,30 @@ +/* Convert string representing a number to integer value, using given locale. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __need_wchar_t +#include <stddef.h> + +#define USE_IN_EXTENDED_LOCALE_MODEL 1 + +extern unsigned long long int ____wcstoull_l_internal (const wchar_t *, + wchar_t **, int, int, + __locale_t); + +#include <wcstoull.c> |