aboutsummaryrefslogtreecommitdiff
path: root/locale/localeinfo.h
diff options
context:
space:
mode:
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 */