From 6e68eecf7b2d778e0bd488466a1798c3b3fd4dcc Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 28 Aug 2002 23:10:57 +0000 Subject: 2002-08-28 Roland McGrath * locale/lc-time.c (_nl_init_era_entries, _nl_get_era_entry, _nl_select_era_entry): Moved to ... * time/era.c: ... here, new file. (_nl_init_era_entries, _nl_get_era_entry, _nl_select_era_entry): Add internal_function to definitions. Take an additional argument giving the `struct locale_data *' to use. * locale/lc-time.c (_get_alt_digit, _nl_get_walt_digit, _nl_parse_alt_digit): Moved to ... * time/alt_digit.c: ... here, new file. * time/lc-time-cleanup.c: New file. * locale/lc-time.c (_nl_postload_time, free_mem): Functions removed. * locale/localeinfo.h (_nl_postload_time): Remove decl. (_nl_cleanup_time): Declare it. (_nl_get_era_entry, _nl_select_era_entry): Update decls. (_get_alt_digit, _nl_get_walt_digit, _nl_parse_alt_digit): Likewise. * time/Makefile (aux): New variable: era, alt_digit, lc-time-cleanup. * time/strftime.c: Pass locale data to helper functions. * time/strptime.c: Likewise. * time/strptime.c [USE_IN_EXTENDED_LOCALE_MODEL] (_NL_CURRENT_WORD): Redefine this too. --- time/strptime.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'time') diff --git a/time/strptime.c b/time/strptime.c index bbd9e64..61f11f4 100644 --- a/time/strptime.c +++ b/time/strptime.c @@ -105,7 +105,7 @@ localtime_r (t, tp) \ if (*decided != raw) \ { \ - val = _nl_parse_alt_digit (&rp); \ + val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ if (val == -1 && *decided != loc) \ { \ *decided = loc; \ @@ -195,15 +195,24 @@ const unsigned short int __mon_yday[2][13] = # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) +# undef _NL_CURRENT_WORD +# define _NL_CURRENT_WORD(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].word) # define LOCALE_PARAM , locale # define LOCALE_ARG , locale # define LOCALE_PARAM_PROTO , __locale_t locale # define LOCALE_PARAM_DECL __locale_t locale; +# define HELPER_LOCALE_ARG , current #else # define LOCALE_PARAM # define LOCALE_ARG # define LOCALE_PARAM_DECL # define LOCALE_PARAM_PROTO +# ifdef _LIBC +# define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) +# else +# define HELPER_LOCALE_ARG +# endif #endif @@ -731,8 +740,8 @@ strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) { if (era_cnt >= 0) { - era = _nl_select_era_entry (era_cnt); - if (match_string (era->era_name, rp)) + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; @@ -747,8 +756,9 @@ strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { - era = _nl_select_era_entry (era_cnt); - if (match_string (era->era_name, rp)) + era = _nl_select_era_entry (era_cnt + HELPER_LOCALE_ARG); + if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; @@ -787,8 +797,8 @@ strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { - era = _nl_select_era_entry (era_cnt); - if (recursive (era->era_format)) + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era != NULL && recursive (era->era_format)) break; } if (era_cnt == (int) num_eras) @@ -971,7 +981,9 @@ strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) if (era_cnt != -1) { - era = _nl_select_era_entry (era_cnt); + era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + if (era == NULL) + return NULL; if (want_era) tm->tm_year = (era->start_date[0] + ((tm->tm_year - era->offset) -- cgit v1.1