diff options
author | Roland McGrath <roland@gnu.org> | 2002-08-28 23:11:21 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-08-28 23:11:21 +0000 |
commit | df9f41c94286bcaac949fd490e11bde61b8a9567 (patch) | |
tree | 2d7deceaa2e48d4dc55a4be335ef9fc010ca161d /locale/localeinfo.h | |
parent | 6e68eecf7b2d778e0bd488466a1798c3b3fd4dcc (diff) | |
download | glibc-df9f41c94286bcaac949fd490e11bde61b8a9567.tar glibc-df9f41c94286bcaac949fd490e11bde61b8a9567.tar.gz glibc-df9f41c94286bcaac949fd490e11bde61b8a9567.tar.bz2 glibc-df9f41c94286bcaac949fd490e11bde61b8a9567.zip |
* 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.
* locale/localeinfo.h (struct locale_data): New member `private'
* locale/loadlocale.c (_nl_intern_locale_data): Initialize it.
(_nl_unload_locale): Call LOCALE->private.cleanup if it is set.
* locale/C-collate.c: Update initializer.
* locale/C-identification.c: Likewise.
* locale/C-measurement.c: Likewise.
* locale/C-telephone.c: Likewise.
* locale/C-address.c: Likewise.
* locale/C-name.c: Likewise.
* locale/C-paper.c: Likewise.
* locale/C-time.c: Likewise.
* locale/C-numeric.c: Likewise.
* locale/C-monetary.c: Likewise.
* locale/C-messages.c : Likewise.
* locale/C-ctype.c: Likewise.
* time/strptime.c [USE_IN_EXTENDED_LOCALE_MODEL] (_NL_CURRENT_WORD):
Redefine this too.
Diffstat (limited to 'locale/localeinfo.h')
-rw-r--r-- | locale/localeinfo.h | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/locale/localeinfo.h b/locale/localeinfo.h index 4e8c86edfa..186aa712c4 100644 --- a/locale/localeinfo.h +++ b/locale/localeinfo.h @@ -54,6 +54,19 @@ struct locale_data ld_archive /* Both point into mmap'd archive regions. */ } alloc; + /* This provides a slot for category-specific code to cache data computed + about this locale. That code can set a cleanup function to deallocate + the data. */ + struct + { + void (*cleanup) (struct locale_data *) internal_function; + union + { + void *data; + struct lc_time_data *time; + }; + } private; + unsigned int usage_count; /* Counter for users. */ int use_translit; /* Nonzero if the mb*towv*() and wc*tomb() @@ -124,6 +137,19 @@ struct era_entry -1 indicates that year number is higher in the past. (like B.C.) */ }; +/* Structure caching computed data about information from LC_TIME. + The `private.time' member of `struct locale_data' points to this. */ +struct lc_time_data +{ + struct era_entry *eras; + size_t num_eras; + int era_initialized; + + const char **alt_digits; + const wchar_t **walt_digits; + int alt_digits_initialized, walt_digits_initialized; +}; + /* LC_CTYPE specific: Hardwired indices for standard wide character translation mappings. */ @@ -303,23 +329,36 @@ extern struct locale_data *_nl_intern_locale_data (int category, /* Return `era' entry which corresponds to TP. Used in strftime. */ -extern struct era_entry *_nl_get_era_entry (const struct tm *tp); +extern struct era_entry *_nl_get_era_entry (const struct tm *tp, + struct locale_data *lc_time) + internal_function attribute_hidden; /* Return `era' cnt'th entry . Used in strptime. */ -extern struct era_entry *_nl_select_era_entry (int cnt); +extern struct era_entry *_nl_select_era_entry (int cnt, + struct locale_data *lc_time) + internal_function attribute_hidden; /* Return `alt_digit' which corresponds to NUMBER. Used in strftime. */ -extern const char *_nl_get_alt_digit (unsigned int number); +extern const char *_nl_get_alt_digit (unsigned int number, + struct locale_data *lc_time) + internal_function attribute_hidden; /* Similar, but now for wide characters. */ -extern const wchar_t *_nl_get_walt_digit (unsigned int number); +extern const wchar_t *_nl_get_walt_digit (unsigned int number, + struct locale_data *lc_time) + internal_function attribute_hidden; /* Parse string as alternative digit and return numeric value. */ -extern int _nl_parse_alt_digit (const char **strp); +extern int _nl_parse_alt_digit (const char **strp, + struct locale_data *lc_time) + internal_function attribute_hidden; /* Postload processing. */ extern void _nl_postload_ctype (void); -extern void _nl_postload_time (void); + +/* Functions used for the `private.cleanup' hook. */ +extern void _nl_cleanup_time (struct locale_data *) + internal_function attribute_hidden; #endif /* localeinfo.h */ |