mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
* time/strptime.c [USE_IN_EXTENDED_LOCALE_MODEL]: Define __strptime_l
instead, taking an extra __locale_t argument. * time/Makefile (routines): Add strptime_l. * time/strptime_l.c: New file. * time/strftime.c [USE_IN_EXTENDED_LOCALE_MODEL]: Define __strftime_l or __wcsftime_l instead, taking an extra __locale_t argument.
This commit is contained in:
parent
c4d6f155e0
commit
60f20c19fb
@ -1,6 +1,10 @@
|
||||
2002-08-27 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* time/strptime.c [USE_IN_EXTENDED_LOCALE_MODEL]: Define __strptime_l
|
||||
instead, taking an extra __locale_t argument.
|
||||
* time/Makefile (routines): Add strptime_l.
|
||||
* time/time.h (__strptime_l, strptime_l): Declare them.
|
||||
* time/strptime_l.c: New file.
|
||||
|
||||
* time/time.h (__strftime_l, strftime_l): Declare them.
|
||||
* wcsmbs/wchar.h (__wcsftime_l, wcsftime_l): Declare them.
|
||||
@ -9,6 +13,8 @@
|
||||
* time/Makefile (routines): Add strftime_l, wcsftime_l.
|
||||
* time/Versions (libc: GLIBC_2.3): Add __strftime_l, __wcsftime_l,
|
||||
strftime_l, wcsftime_l.
|
||||
* time/strftime.c [USE_IN_EXTENDED_LOCALE_MODEL]: Define __strftime_l
|
||||
or __wcsftime_l instead, taking an extra __locale_t argument.
|
||||
|
||||
* locale/Versions (libc: GLIBC_PRIVATE): Move __uselocale to ...
|
||||
(libc: GLIBC_2.3): ... here.
|
||||
|
@ -28,7 +28,7 @@ routines := offtime asctime clock ctime ctime_r difftime \
|
||||
gettimeofday settimeofday adjtime tzset \
|
||||
tzfile getitimer setitimer \
|
||||
stime dysize timegm ftime \
|
||||
strptime getdate \
|
||||
getdate strptime strptime_l \
|
||||
strftime wcsftime strftime_l wcsftime_l
|
||||
distribute := datemsk
|
||||
|
||||
|
@ -302,6 +302,25 @@ static const CHAR_T zeroes[16] = /* "0000000000000000" */
|
||||
#endif
|
||||
|
||||
|
||||
#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
|
||||
/* 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. */
|
||||
# define strftime __strftime_l
|
||||
# define wcsftime __wcsftime_l
|
||||
# undef _NL_CURRENT
|
||||
# define _NL_CURRENT(category, item) \
|
||||
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||
# define LOCALE_PARAM , loc
|
||||
# define LOCALE_ARG , loc
|
||||
# define LOCALE_PARAM_DECL __locale_t loc;
|
||||
#else
|
||||
# define LOCALE_PARAM
|
||||
# define LOCALE_ARG
|
||||
# define LOCALE_PARAM_DECL
|
||||
#endif
|
||||
|
||||
#ifdef COMPILE_WIDE
|
||||
# define TOUPPER(Ch) towupper (Ch)
|
||||
# define TOLOWER(Ch) towlower (Ch)
|
||||
@ -466,13 +485,18 @@ static CHAR_T const month_name[][10] =
|
||||
anywhere, so to determine how many characters would be
|
||||
written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */
|
||||
size_t
|
||||
my_strftime (s, maxsize, format, tp ut_argument)
|
||||
my_strftime (s, maxsize, format, tp ut_argument LOCALE_PARAM)
|
||||
CHAR_T *s;
|
||||
size_t maxsize;
|
||||
const CHAR_T *format;
|
||||
const struct tm *tp;
|
||||
ut_argument_spec
|
||||
LOCALE_PARAM_DECL
|
||||
{
|
||||
#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
|
||||
const struct locale_data *const current = loc->__locales[LC_TIME];
|
||||
#endif
|
||||
|
||||
int hour12 = tp->tm_hour;
|
||||
#ifdef _NL_CURRENT
|
||||
/* We cannot make the following values variables since we must delay
|
||||
@ -807,9 +831,9 @@ my_strftime (s, maxsize, format, tp ut_argument)
|
||||
{
|
||||
CHAR_T *old_start = p;
|
||||
size_t len = my_strftime (NULL, (size_t) -1, subfmt,
|
||||
tp ut_argument);
|
||||
tp ut_argument LOCALE_ARG);
|
||||
add (len, my_strftime (p, maxsize - i, subfmt,
|
||||
tp ut_argument));
|
||||
tp ut_argument LOCALE_ARG));
|
||||
|
||||
if (to_uppcase)
|
||||
while (old_start < p)
|
||||
|
@ -128,7 +128,8 @@ localtime_r (t, tp)
|
||||
#endif
|
||||
#define recursive(new_fmt) \
|
||||
(*(new_fmt) != '\0' \
|
||||
&& (rp = strptime_internal (rp, (new_fmt), tm, decided, era_cnt)) != NULL)
|
||||
&& (rp = strptime_internal (rp, (new_fmt), tm, \
|
||||
decided, era_cnt LOCALE_ARG)) != NULL)
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
@ -185,6 +186,27 @@ const unsigned short int __mon_yday[2][13] =
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
|
||||
/* 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. */
|
||||
# define strptime __strptime_l
|
||||
# undef _NL_CURRENT
|
||||
# define _NL_CURRENT(category, item) \
|
||||
(current->values[_NL_ITEM_INDEX (item)].string)
|
||||
# define LOCALE_PARAM , locale
|
||||
# define LOCALE_ARG , locale
|
||||
# define LOCALE_PARAM_PROTO , __locale_t locale
|
||||
# define LOCALE_PARAM_DECL __locale_t locale;
|
||||
#else
|
||||
# define LOCALE_PARAM
|
||||
# define LOCALE_ARG
|
||||
# define LOCALE_PARAM_DECL
|
||||
# define LOCALE_PARAM_PROTO
|
||||
#endif
|
||||
|
||||
|
||||
/* Status of lookup: do we use the locale data or the raw data? */
|
||||
enum locale_status { not, loc, raw };
|
||||
|
||||
@ -222,24 +244,31 @@ day_of_the_year (struct tm *tm)
|
||||
+ (tm->tm_mday - 1));
|
||||
}
|
||||
|
||||
static char *
|
||||
#ifdef _LIBC
|
||||
internal_function
|
||||
#endif
|
||||
strptime_internal __P ((const char *rp, const char *fmt, struct tm *tm,
|
||||
enum locale_status *decided, int era_cnt));
|
||||
|
||||
static char *
|
||||
#ifdef _LIBC
|
||||
internal_function
|
||||
#endif
|
||||
strptime_internal (rp, fmt, tm, decided, era_cnt)
|
||||
strptime_internal __P ((const char *rp, const char *fmt, struct tm *tm,
|
||||
enum locale_status *decided, int era_cnt
|
||||
LOCALE_PARAM_PROTO));
|
||||
|
||||
static char *
|
||||
#ifdef _LIBC
|
||||
internal_function
|
||||
#endif
|
||||
strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM)
|
||||
const char *rp;
|
||||
const char *fmt;
|
||||
struct tm *tm;
|
||||
enum locale_status *decided;
|
||||
int era_cnt;
|
||||
LOCALE_PARAM_DECL
|
||||
{
|
||||
#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
|
||||
const struct locale_data *const current = locale->__locales[LC_TIME];
|
||||
#endif
|
||||
|
||||
const char *rp_backup;
|
||||
int cnt;
|
||||
size_t val;
|
||||
@ -1023,10 +1052,11 @@ strptime_internal (rp, fmt, tm, decided, era_cnt)
|
||||
|
||||
|
||||
char *
|
||||
strptime (buf, format, tm)
|
||||
strptime (buf, format, tm LOCALE_PARAM)
|
||||
const char *buf;
|
||||
const char *format;
|
||||
struct tm *tm;
|
||||
LOCALE_PARAM_DECL
|
||||
{
|
||||
enum locale_status decided;
|
||||
|
||||
@ -1035,8 +1065,8 @@ strptime (buf, format, tm)
|
||||
#else
|
||||
decided = raw;
|
||||
#endif
|
||||
return strptime_internal (buf, format, tm, &decided, -1);
|
||||
return strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG);
|
||||
}
|
||||
#ifdef _LIBC
|
||||
#if defined _LIBC && !defined USE_IN_EXTENDED_LOCALE_MODEL
|
||||
libc_hidden_def (strptime)
|
||||
#endif
|
||||
|
22
time/strptime_l.c
Normal file
22
time/strptime_l.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* Copyright (C) 2002 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
|
||||
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. */
|
||||
|
||||
#define USE_IN_EXTENDED_LOCALE_MODEL 1
|
||||
#include <strptime.c>
|
||||
|
||||
weak_alias (__strptime_l, strptime_l)
|
Loading…
Reference in New Issue
Block a user