aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog69
-rw-r--r--include/monetary.h4
-rw-r--r--include/string.h2
-rw-r--r--include/time.h13
-rw-r--r--include/wchar.h3
-rw-r--r--locale/uselocale.c4
-rw-r--r--stdlib/strfmon.c632
-rw-r--r--stdlib/strfmon_l.c636
-rw-r--r--stdlib/strtod.c1560
-rw-r--r--stdlib/strtod_l.c1551
-rw-r--r--stdlib/strtof.c37
-rw-r--r--stdlib/strtof_l.c28
-rw-r--r--stdlib/strtold.c35
-rw-r--r--stdlib/strtold_l.c53
-rw-r--r--string/strcoll.c528
-rw-r--r--string/strcoll_l.c514
-rw-r--r--string/strxfrm.c444
-rw-r--r--string/strxfrm_l.c429
-rw-r--r--sysdeps/generic/strtol.c533
-rw-r--r--sysdeps/generic/strtol_l.c493
-rw-r--r--sysdeps/generic/strtold_l.c (renamed from sysdeps/generic/strtold.c)18
-rw-r--r--sysdeps/generic/strtoll_l.c8
-rw-r--r--sysdeps/generic/strtoul_l.c8
-rw-r--r--sysdeps/generic/strtoull_l.c9
-rw-r--r--sysdeps/generic/wcstol_l.c8
-rw-r--r--sysdeps/generic/wcstoll_l.c8
-rw-r--r--sysdeps/generic/wcstoul_l.c8
-rw-r--r--sysdeps/generic/wcstoull_l.c8
-rw-r--r--sysdeps/ieee754/ldbl-128/strtold_l.c (renamed from sysdeps/ieee754/ldbl-128/strtold.c)26
-rw-r--r--sysdeps/ieee754/ldbl-96/strtold_l.c (renamed from sysdeps/ieee754/ldbl-96/strtold.c)26
-rw-r--r--sysdeps/m68k/strtold.c2
-rw-r--r--sysdeps/m68k/strtold_l.c2
-rw-r--r--time/strftime.c1421
-rw-r--r--time/strftime_l.c1426
-rw-r--r--time/strptime.c1066
-rw-r--r--time/strptime_l.c1052
-rw-r--r--time/wcsftime.c32
-rw-r--r--time/wcsftime_l.c8
-rw-r--r--wcsmbs/wcscoll.c15
-rw-r--r--wcsmbs/wcscoll_l.c19
-rw-r--r--wcsmbs/wcstod.c8
-rw-r--r--wcsmbs/wcstod_l.c10
-rw-r--r--wcsmbs/wcstof.c29
-rw-r--r--wcsmbs/wcstof_l.c12
-rw-r--r--wcsmbs/wcstold.c48
-rw-r--r--wcsmbs/wcstold_l.c32
-rw-r--r--wcsmbs/wcsxfrm.c17
-rw-r--r--wcsmbs/wcsxfrm_l.c19
48 files changed, 6501 insertions, 6412 deletions
diff --git a/ChangeLog b/ChangeLog
index 372a32262b..3e41a14db2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,72 @@
+2004-03-14 Ulrich Drepper <drepper@redhat.com>
+
+ Make the non-_l functions wrappers around the _l functions.
+ * include/monetary.h: Declare __vstrmon_l.
+ * include/string.h: Add libc_hidden_proto for __strcoll_l and
+ __strxfrm_l.
+ * include/time.h: Define ptime_locale_status. Declare
+ __strptime_internal.
+ * include/wchar.h: Add libc_hidden_proto for __wcscoll_l and
+ __wcsxfrm_l.
+ * stdlib/strfmon.c: Move the code to strfmon_l.c. Add little
+ wrapper around __vstrfmon_l.
+ * stdlib/strfmon_l.c: Add real implementation. Split into new
+ function __vstrfmon_l to allow calling it from strfmon.
+ * stdlib/strtod.c: Move real code to strtod_l.c and add wrapper.
+ * stdlib/strtod_l.c: Add real implementation.
+ * stdlib/strtof.c: Adjust to changed strtod.c.
+ * stdlib/strtof_l.c: Include strtod_l.c now.
+ * stdlib/strtold.c: New file.
+ * stdlib/strtold_l.c: Removed.
+ * string/strcoll.c: Move real code to strcoll_l.c: Add wrapper.
+ * string/strcoll_l.c: Add real implementation.
+ * string/strxfrm.c: Move real code to strxfrm_l.c: Add wrapper.
+ * string/strxfrm_l.c: Add real implementation.
+ * sysdeps/generic/strtol.c: Move real implementation to strtol_l.c.
+ Add wrappers.
+ * sysdeps/generic/strtol_l.c: Add real implementation.
+ * sysdeps/generic/strtold.c: Removed.
+ * sysdeps/generic/strtold_l.c: New file.
+ * sysdeps/generic/strtoll_l.c: Include strtol_l.c now. Adjust
+ #defines.
+ * sysdeps/generic/strtoul_l.c: Likewise.
+ * sysdeps/generic/strtoull_l.c: Likewise.
+ * sysdeps/generic/wcstol_l.c: Likewise.
+ * sysdeps/generic/wcstoll_l.c: Likewise.
+ * sysdeps/generic/wcstoul_l.c: Likewise.
+ * sysdeps/generic/wcstoull_l.c: Likewise.
+ * sysdeps/ieee754/ldbl-128/strtold.c: Removed.
+ * sysdeps/ieee754/ldbl-128/strtold_l.c: New file.
+ * sysdeps/ieee754/ldbl-96/strtold.c: Removed.
+ * sysdeps/ieee754/ldbl-96/strtold_l.c: New file.
+ * sysdeps/m68k/strtold.c: Removed.
+ * sysdeps/m68k/strtold_l.c: New file.
+ * time/strftime.c: Move real code to strftime_l.c. Add wrapper.
+ * time/strftime_l.c: Add real implementation.
+ * time/strptime.c: Move real code to strptime_l.c. Add wrapper.
+ * time/strptime_l.c: Add real implementation.
+ * time/wcsftime.c: Simplify since only wrappers are defined in
+ strftime.c.
+ * time/wcsftime_l.c: Include strftime_l.c.
+ * wcsmbs/wcscoll.c: Simplify since the file is not used by wcscoll_l.c
+ anymore.
+ * wcsmbs/wcscoll_l.c: Include strcoll_l.c.
+ * wcsmbs/wcsxfrm.c: Simplify since the file is not used by wcsxfrm_l.c
+ anymore.
+ * wcsmbs/wcsxfrm_l.c: Include strxfrm_l.c.
+ * wcsmbs/wcstod.c: Prepare to include new strtod.c.
+ * wcsmbs/wcstod_l.c: Include strtod_l.c.
+ * wcsmbs/wcstof.c: Prepare to include new strtof.c.
+ * wcsmbs/wcstof_l.c: Include strtof_l.c.
+ * wcsmbs/wcstold.c: Prepare to include new strtold.c.
+ * wcsmbs/wcstold_l.c: Include strtold_l.c.
+
+ * locale/uselocale.c: Use _NL_CURRENT_LOCALE instead of __libc_tsd_get.
+
+ * sysdeps/generic/strcasecmp.c: Optimize a bit. It's better to get
+ a reference to the current locale and then use the _l functions.
+ * sysdeps/generic/strncase.c: Likewise.
+
2004-03-11 Jeroen Dekkers <jeroen@dekkers.cx>
* cppflags-iterator.mk: Change libof-$(cpp-src) to
diff --git a/include/monetary.h b/include/monetary.h
index 4735dc6c8a..98b3dbf294 100644
--- a/include/monetary.h
+++ b/include/monetary.h
@@ -1 +1,5 @@
#include <stdlib/monetary.h>
+#include <stdarg.h>
+
+extern ssize_t __vstrfmon_l (char *s, size_t maxsize, __locale_t loc,
+ const char *format, va_list ap);
diff --git a/include/string.h b/include/string.h
index 041590b1db..42d9362dfc 100644
--- a/include/string.h
+++ b/include/string.h
@@ -78,6 +78,8 @@ libc_hidden_proto (__strerror_r)
libc_hidden_proto (__strverscmp)
libc_hidden_proto (basename)
libc_hidden_proto (strcoll)
+libc_hidden_proto (__strcoll_l)
+libc_hidden_proto (__strxfrm_l)
libc_hidden_builtin_proto (memchr)
libc_hidden_builtin_proto (memcpy)
diff --git a/include/time.h b/include/time.h
index 87e0f08f8d..5a95be5a4e 100644
--- a/include/time.h
+++ b/include/time.h
@@ -3,6 +3,7 @@
# include <time/time.h>
#else
# include <time/time.h>
+# include <xlocale.h>
extern __typeof (strftime_l) __strftime_l;
libc_hidden_proto (__strftime_l)
@@ -84,6 +85,18 @@ extern int __getdate_r (__const char *__string, struct tm *__resbufp);
extern int __getclktck (void);
+/* strptime support. */
+/* Status of lookup: do we use the locale data or the raw data? */
+enum ptime_locale_status { not, loc, raw };
+
+extern char * __strptime_internal (const char *rp, const char *fmt,
+ struct tm *tm,
+ enum ptime_locale_status *decided,
+ int era_cnt, __locale_t loc)
+ internal_function;
+
+
+
/* Use in the clock_* functions. Size of the field representing the
actual clock ID. */
#ifndef _ISOMAC
diff --git a/include/wchar.h b/include/wchar.h
index f69463f57a..73bd4a8fef 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -29,6 +29,9 @@ libc_hidden_proto (__wcstoull_internal)
libc_hidden_proto (__wcscasecmp_l)
libc_hidden_proto (__wcsncasecmp_l)
+libc_hidden_proto (__wcscoll_l)
+libc_hidden_proto (__wcsxfrm_l)
+
libc_hidden_proto (fputws_unlocked)
libc_hidden_proto (putwc_unlocked)
libc_hidden_proto (putwc)
diff --git a/locale/uselocale.c b/locale/uselocale.c
index e2f38c10ba..4e63dabd8e 100644
--- a/locale/uselocale.c
+++ b/locale/uselocale.c
@@ -1,5 +1,5 @@
/* uselocale -- fetch and set the current per-thread locale
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
locale_t
__uselocale (locale_t newloc)
{
- locale_t oldloc = __libc_tsd_get (LOCALE);
+ locale_t oldloc = _NL_CURRENT_LOCALE;
if (newloc != NULL)
{
diff --git a/stdlib/strfmon.c b/stdlib/strfmon.c
index b17dc9823c..b11f95c9ac 100644
--- a/stdlib/strfmon.c
+++ b/stdlib/strfmon.c
@@ -19,645 +19,21 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <ctype.h>
-#include <errno.h>
-#include <langinfo.h>
-#include <locale.h>
#include <monetary.h>
-#ifdef USE_IN_LIBIO
-# include "../libio/libioP.h"
-# include "../libio/strfile.h"
-#endif
-#include <printf.h>
#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include "../locale/localeinfo.h"
+#include <locale/localeinfo.h>
-#define out_char(Ch) \
- do { \
- if (dest >= s + maxsize - 1) \
- { \
- __set_errno (E2BIG); \
- va_end (ap); \
- return -1; \
- } \
- *dest++ = (Ch); \
- } while (0)
-
-#define out_string(String) \
- do { \
- const char *_s = (String); \
- while (*_s) \
- out_char (*_s++); \
- } while (0)
-
-#define out_nstring(String, N) \
- do { \
- int _n = (N); \
- const char *_s = (String); \
- while (_n-- > 0) \
- out_char (*_s++); \
- } while (0)
-
-#define to_digit(Ch) ((Ch) - '0')
-
-
-/* We use this code also for the extended locale handling where the
- function gets as an additional argument the locale which has to be
- used. To access the values we have to redefine the _NL_CURRENT
- macro. */
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# undef _NL_CURRENT
-# define _NL_CURRENT(category, item) \
- (current->values[_NL_ITEM_INDEX (item)].string)
-#endif
-
-extern int __printf_fp (FILE *, const struct printf_info *,
- const void *const *);
-libc_hidden_proto (__printf_fp)
-/* This function determines the number of digit groups in the output.
- The definition is in printf_fp.c. */
-extern unsigned int __guess_grouping (unsigned int intdig_max,
- const char *grouping, wchar_t sepchar);
-
-
-/* We have to overcome some problems with this implementation. On the
- one hand the strfmon() function is specified in XPG4 and of course
- it has to follow this. But on the other hand POSIX.2 specifies
- some information in the LC_MONETARY category which should be used,
- too. Some of the information contradicts the information which can
- be specified in format string. */
-#ifndef USE_IN_EXTENDED_LOCALE_MODEL
ssize_t
strfmon (char *s, size_t maxsize, const char *format, ...)
-#else
-ssize_t
-__strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
-#endif
{
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
- struct locale_data *current = loc->__locales[LC_MONETARY];
-#endif
-#ifdef USE_IN_LIBIO
- _IO_strfile f;
-# ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-# endif
-#else
- FILE f;
-#endif
- struct printf_info info;
- va_list ap; /* Scan through the varargs. */
- char *dest; /* Pointer so copy the output. */
- const char *fmt; /* Pointer that walks through format. */
+ va_list ap;
va_start (ap, format);
- dest = s;
- fmt = format;
-
- /* Loop through the format-string. */
- while (*fmt != '\0')
- {
- /* The floating-point value to output. */
- union
- {
- double dbl;
- __long_double_t ldbl;
- }
- fpnum;
- int int_format;
- int print_curr_symbol;
- int left_prec;
- int left_pad;
- int right_prec;
- int group;
- char pad;
- int is_long_double;
- int p_sign_posn;
- int n_sign_posn;
- int sign_posn;
- int other_sign_posn;
- int left;
- int is_negative;
- int sep_by_space;
- int other_sep_by_space;
- int cs_precedes;
- int other_cs_precedes;
- const char *sign_string;
- const char *other_sign_string;
- int done;
- const char *currency_symbol;
- size_t currency_symbol_len;
- int width;
- char *startp;
- const void *ptr;
- char space_char;
-
- /* Process all character which do not introduce a format
- specification. */
- if (*fmt != '%')
- {
- out_char (*fmt++);
- continue;
- }
-
- /* "%%" means a single '%' character. */
- if (fmt[1] == '%')
- {
- out_char (*++fmt);
- ++fmt;
- continue;
- }
-
- /* Defaults for formatting. */
- int_format = 0; /* Use international curr. symbol */
- print_curr_symbol = 1; /* Print the currency symbol. */
- left_prec = -1; /* No left precision specified. */
- right_prec = -1; /* No right precision specified. */
- group = 1; /* Print digits grouped. */
- pad = ' '; /* Fill character is <SP>. */
- is_long_double = 0; /* Double argument by default. */
- p_sign_posn = -1; /* This indicates whether the */
- n_sign_posn = -1; /* '(' flag is given. */
- width = -1; /* No width specified so far. */
- left = 0; /* Right justified by default. */
-
- /* Parse group characters. */
- while (1)
- {
- switch (*++fmt)
- {
- case '=': /* Set fill character. */
- pad = *++fmt;
- if (pad == '\0')
- {
- /* Premature EOS. */
- __set_errno (EINVAL);
- va_end (ap);
- return -1;
- }
- continue;
- case '^': /* Don't group digits. */
- group = 0;
- continue;
- case '+': /* Use +/- for sign of number. */
- if (n_sign_posn != -1)
- {
- __set_errno (EINVAL);
-