diff options
Diffstat (limited to 'time/strftime.c')
-rw-r--r-- | time/strftime.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/time/strftime.c b/time/strftime.c index 5ed47f6cbd..8ae5985537 100644 --- a/time/strftime.c +++ b/time/strftime.c @@ -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) |