aboutsummaryrefslogtreecommitdiff
path: root/locale/localeinfo.h
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-08-28 23:11:21 +0000
committerRoland McGrath <roland@gnu.org>2002-08-28 23:11:21 +0000
commitdf9f41c94286bcaac949fd490e11bde61b8a9567 (patch)
tree2d7deceaa2e48d4dc55a4be335ef9fc010ca161d /locale/localeinfo.h
parent6e68eecf7b2d778e0bd488466a1798c3b3fd4dcc (diff)
downloadglibc-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.h51
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 */