Blame locale/localeinfo.h

Packit Service 82fcde
/* Declarations for internal libc locale interfaces
Packit Service 82fcde
   Copyright (C) 1995-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _LOCALEINFO_H
Packit Service 82fcde
#define _LOCALEINFO_H 1
Packit Service 82fcde
Packit Service 82fcde
#include <stddef.h>
Packit Service 82fcde
#include <langinfo.h>
Packit Service 82fcde
#include <limits.h>
Packit Service 82fcde
#include <locale.h>
Packit Service 82fcde
#include <time.h>
Packit Service 82fcde
#include <stdint.h>
Packit Service 82fcde
#include <sys/types.h>
Packit Service 82fcde
Packit Service 82fcde
#include <intl/loadinfo.h>	/* For loaded_l10nfile definition.  */
Packit Service 82fcde
Packit Service 82fcde
/* Magic number at the beginning of a locale data file for CATEGORY.  */
Packit Service 82fcde
#define	LIMAGIC(category) \
Packit Service 82fcde
  (category == LC_COLLATE						\
Packit Service 82fcde
   ? ((unsigned int) (0x20051014 ^ (category)))				\
Packit Service 82fcde
   : category == LC_CTYPE						\
Packit Service 82fcde
   ? ((unsigned int) (0x20090720 ^ (category)))				\
Packit Service 82fcde
   : ((unsigned int) (0x20031115 ^ (category))))
Packit Service 82fcde
Packit Service 82fcde
/* Two special weight constants for the collation data.  */
Packit Service 82fcde
#define IGNORE_CHAR	2
Packit Service 82fcde
Packit Service 82fcde
/* We use a special value for the usage counter in `__locale_data' to
Packit Service 82fcde
   signal that this data must never be removed anymore.  */
Packit Service 82fcde
#define MAX_USAGE_COUNT (UINT_MAX - 1)
Packit Service 82fcde
#define UNDELETABLE	UINT_MAX
Packit Service 82fcde
Packit Service 82fcde
/* Structure describing locale data in core for a category.  */
Packit Service 82fcde
struct __locale_data
Packit Service 82fcde
{
Packit Service 82fcde
  const char *name;
Packit Service 82fcde
  const char *filedata;		/* Region mapping the file data.  */
Packit Service 82fcde
  off_t filesize;		/* Size of the file (and the region).  */
Packit Service 82fcde
  enum				/* Flavor of storage used for those.  */
Packit Service 82fcde
  {
Packit Service 82fcde
    ld_malloced,		/* Both are malloc'd.  */
Packit Service 82fcde
    ld_mapped,			/* name is malloc'd, filedata mmap'd */
Packit Service 82fcde
    ld_archive			/* Both point into mmap'd archive regions.  */
Packit Service 82fcde
  } alloc;
Packit Service 82fcde
Packit Service 82fcde
  /* This provides a slot for category-specific code to cache data computed
Packit Service 82fcde
     about this locale.  That code can set a cleanup function to deallocate
Packit Service 82fcde
     the data.  */
Packit Service 82fcde
  struct
Packit Service 82fcde
  {
Packit Service 82fcde
    void (*cleanup) (struct __locale_data *);
Packit Service 82fcde
    union
Packit Service 82fcde
    {
Packit Service 82fcde
      void *data;
Packit Service 82fcde
      struct lc_time_data *time;
Packit Service 82fcde
      const struct gconv_fcts *ctype;
Packit Service 82fcde
    };
Packit Service 82fcde
  } private;
Packit Service 82fcde
Packit Service 82fcde
  unsigned int usage_count;	/* Counter for users.  */
Packit Service 82fcde
Packit Service 82fcde
  int use_translit;		/* Nonzero if the mb*towv*() and wc*tomb()
Packit Service 82fcde
				   functions should use transliteration.  */
Packit Service 82fcde
Packit Service 82fcde
  unsigned int nstrings;	/* Number of strings below.  */
Packit Service 82fcde
  union locale_data_value
Packit Service 82fcde
  {
Packit Service 82fcde
    const uint32_t *wstr;
Packit Service 82fcde
    const char *string;
Packit Service 82fcde
    unsigned int word;		/* Note endian issues vs 64-bit pointers.  */
Packit Service 82fcde
  }
Packit Service 82fcde
  values __flexarr;	/* Items, usually pointers into `filedata'.  */
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* This alignment is used for 32-bit integers in locale files, both
Packit Service 82fcde
   those that are explicitly int32_t or uint32_t and those that are
Packit Service 82fcde
   wchar_t, regardless of the (possibly smaller) alignment required
Packit Service 82fcde
   for such integers on a particular host.  */
Packit Service 82fcde
#define LOCFILE_ALIGN		sizeof (int32_t)
Packit Service 82fcde
#define LOCFILE_ALIGN_MASK	(LOCFILE_ALIGN - 1)
Packit Service 82fcde
#define LOCFILE_ALIGN_UP(x)	(((x) + LOCFILE_ALIGN - 1)	\
Packit Service 82fcde
				 & ~LOCFILE_ALIGN_MASK)
Packit Service 82fcde
#define LOCFILE_ALIGNED_P(x)	(((x) & LOCFILE_ALIGN_MASK) == 0)
Packit Service 82fcde
Packit Service 82fcde
/* We know three kinds of collation sorting rules.  */
Packit Service 82fcde
enum coll_sort_rule
Packit Service 82fcde
{
Packit Service 82fcde
  illegal_0__,
Packit Service 82fcde
  sort_forward,
Packit Service 82fcde
  sort_backward,
Packit Service 82fcde
  illegal_3__,
Packit Service 82fcde
  sort_position,
Packit Service 82fcde
  sort_forward_position,
Packit Service 82fcde
  sort_backward_position,
Packit Service 82fcde
  sort_mask
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* We can map the types of the entries into a few categories.  */
Packit Service 82fcde
enum value_type
Packit Service 82fcde
{
Packit Service 82fcde
  none,
Packit Service 82fcde
  string,
Packit Service 82fcde
  stringarray,
Packit Service 82fcde
  byte,
Packit Service 82fcde
  bytearray,
Packit Service 82fcde
  word,
Packit Service 82fcde
  stringlist,
Packit Service 82fcde
  wordarray,
Packit Service 82fcde
  wstring,
Packit Service 82fcde
  wstringarray,
Packit Service 82fcde
  wstringlist
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Definitions for `era' information from LC_TIME.  */
Packit Service 82fcde
#define ERA_NAME_FORMAT_MEMBERS 4
Packit Service 82fcde
#define ERA_M_NAME   0
Packit Service 82fcde
#define ERA_M_FORMAT 1
Packit Service 82fcde
#define ERA_W_NAME   2
Packit Service 82fcde
#define ERA_W_FORMAT 3
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Structure to access `era' information from LC_TIME.  */
Packit Service 82fcde
struct era_entry
Packit Service 82fcde
{
Packit Service 82fcde
  uint32_t direction;		/* Contains '+' or '-'.  */
Packit Service 82fcde
  int32_t offset;
Packit Service 82fcde
  int32_t start_date[3];
Packit Service 82fcde
  int32_t stop_date[3];
Packit Service 82fcde
  const char *era_name;
Packit Service 82fcde
  const char *era_format;
Packit Service 82fcde
  const wchar_t *era_wname;
Packit Service 82fcde
  const wchar_t *era_wformat;
Packit Service 82fcde
  int absolute_direction;
Packit Service 82fcde
  /* absolute direction:
Packit Service 82fcde
     +1 indicates that year number is higher in the future. (like A.D.)
Packit Service 82fcde
     -1 indicates that year number is higher in the past. (like B.C.)  */
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* Structure caching computed data about information from LC_TIME.
Packit Service 82fcde
   The `private.time' member of `struct __locale_data' points to this.  */
Packit Service 82fcde
struct lc_time_data
Packit Service 82fcde
{
Packit Service 82fcde
  struct era_entry *eras;
Packit Service 82fcde
  size_t num_eras;
Packit Service 82fcde
  int era_initialized;
Packit Service 82fcde
Packit Service 82fcde
  const char **alt_digits;
Packit Service 82fcde
  const wchar_t **walt_digits;
Packit Service 82fcde
  int alt_digits_initialized;
Packit Service 82fcde
  int walt_digits_initialized;
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* LC_CTYPE specific:
Packit Service 82fcde
   Hardwired indices for standard wide character translation mappings.  */
Packit Service 82fcde
enum
Packit Service 82fcde
{
Packit Service 82fcde
  __TOW_toupper = 0,
Packit Service 82fcde
  __TOW_tolower = 1
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* LC_CTYPE specific:
Packit Service 82fcde
   Access a wide character class with a single character index.
Packit Service 82fcde
   _ISCTYPE (c, desc) = iswctype (btowc (c), desc).
Packit Service 82fcde
   c must be an `unsigned char'.  desc must be a nonzero wctype_t.  */
Packit Service 82fcde
#define _ISCTYPE(c, desc) \
Packit Service 82fcde
  (((((const uint32_t *) (desc)) - 8)[(c) >> 5] >> ((c) & 0x1f)) & 1)
Packit Service 82fcde
Packit Service 82fcde
/* Category name handling variables.  */
Packit Service 82fcde
#define CATNAMEMF(line) CATNAMEMF1 (line)
Packit Service 82fcde
#define CATNAMEMF1(line) str##line
Packit Service 82fcde
extern const union catnamestr_t
Packit Service 82fcde
{
Packit Service 82fcde
  struct
Packit Service 82fcde
  {
Packit Service 82fcde
#define DEFINE_CATEGORY(category, category_name, items, a) \
Packit Service 82fcde
    char CATNAMEMF (__LINE__)[sizeof (category_name)];
Packit Service 82fcde
#include "categories.def"
Packit Service 82fcde
#undef DEFINE_CATEGORY
Packit Service 82fcde
  };
Packit Service 82fcde
  char str[0];
Packit Service 82fcde
} _nl_category_names attribute_hidden;
Packit Service 82fcde
extern const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden;
Packit Service 82fcde
extern const uint8_t _nl_category_name_sizes[__LC_LAST] attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Name of the standard locales.  */
Packit Service 82fcde
extern const char _nl_C_name[] attribute_hidden;
Packit Service 82fcde
extern const char _nl_POSIX_name[] attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* The standard codeset.  */
Packit Service 82fcde
extern const char _nl_C_codeset[] attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* This is the internal locale_t object that holds the global locale
Packit Service 82fcde
   controlled by calls to setlocale.  A thread's TSD locale pointer
Packit Service 82fcde
   points to this when `uselocale (LC_GLOBAL_LOCALE)' is in effect.  */
Packit Service 82fcde
extern struct __locale_struct _nl_global_locale attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* This fetches the thread-local locale_t pointer, either one set with
Packit Service 82fcde
   uselocale or &_nl_global_locale.  */
Packit Service 82fcde
#define _NL_CURRENT_LOCALE	(__libc_tsd_get (locale_t, LOCALE))
Packit Service 82fcde
#include <libc-tsd.h>
Packit Service 82fcde
__libc_tsd_define (extern, locale_t, LOCALE)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* For static linking it is desireable to avoid always linking in the code
Packit Service 82fcde
   and data for every category when we can tell at link time that they are
Packit Service 82fcde
   unused.  We can manage this playing some tricks with weak references.
Packit Service 82fcde
   But with thread-local locale settings, it becomes quite ungainly unless
Packit Service 82fcde
   we can use __thread variables.  So only in that case do we attempt this.  */
Packit Service 82fcde
#ifndef SHARED
Packit Service 82fcde
# include <tls.h>
Packit Service 82fcde
# define NL_CURRENT_INDIRECT	1
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#ifdef NL_CURRENT_INDIRECT
Packit Service 82fcde
Packit Service 82fcde
/* For each category declare the thread-local variable for the current
Packit Service 82fcde
   locale data.  This has an extra indirection so it points at the
Packit Service 82fcde
   __locales[CATEGORY] element in either _nl_global_locale or the current
Packit Service 82fcde
   locale object set by uselocale, which points at the actual data.  The
Packit Service 82fcde
   reason for having these variables is so that references to particular
Packit Service 82fcde
   categories will link in the lc-CATEGORY.c module to define this symbol,
Packit Service 82fcde
   and we arrange that linking that module is what brings in all the code
Packit Service 82fcde
   associated with this category.  */
Packit Service 82fcde
#define DEFINE_CATEGORY(category, category_name, items, a) \
Packit Service 82fcde
extern __thread struct __locale_data *const *_nl_current_##category \
Packit Service 82fcde
  attribute_hidden attribute_tls_model_ie;
Packit Service 82fcde
#include "categories.def"
Packit Service 82fcde
#undef	DEFINE_CATEGORY
Packit Service 82fcde
Packit Service 82fcde
/* Return a pointer to the current `struct __locale_data' for CATEGORY.  */
Packit Service 82fcde
#define _NL_CURRENT_DATA(category)	(*_nl_current_##category)
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's string for ITEM.  */
Packit Service 82fcde
#define _NL_CURRENT(category, item) \
Packit Service 82fcde
  ((*_nl_current_##category)->values[_NL_ITEM_INDEX (item)].string)
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's string for ITEM.  */
Packit Service 82fcde
#define _NL_CURRENT_WSTR(category, item) \
Packit Service 82fcde
  ((wchar_t *) (*_nl_current_##category)->values[_NL_ITEM_INDEX (item)].wstr)
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's word for ITEM.  */
Packit Service 82fcde
#define _NL_CURRENT_WORD(category, item) \
Packit Service 82fcde
  ((uint32_t) (*_nl_current_##category)->values[_NL_ITEM_INDEX (item)].word)
Packit Service 82fcde
Packit Service 82fcde
/* This is used in lc-CATEGORY.c to define _nl_current_CATEGORY.  The symbol
Packit Service 82fcde
   _nl_current_CATEGORY_used is set to a value unequal to zero to mark this
Packit Service 82fcde
   category as used.  On S390 the used relocation to load the symbol address
Packit Service 82fcde
   can only handle even addresses.  */
Packit Service 82fcde
#define _NL_CURRENT_DEFINE(category) \
Packit Service 82fcde
  __thread struct __locale_data *const *_nl_current_##category \
Packit Service 82fcde
    attribute_hidden = &_nl_global_locale.__locales[category]; \
Packit Service 82fcde
  asm (".globl " __SYMBOL_PREFIX "_nl_current_" #category "_used\n" \
Packit Service 82fcde
       _NL_CURRENT_DEFINE_ABS (_nl_current_##category##_used, 2));
Packit Service 82fcde
#ifdef HAVE_ASM_SET_DIRECTIVE
Packit Service 82fcde
# define _NL_CURRENT_DEFINE_ABS(sym, val) ".set " #sym ", " #val
Packit Service 82fcde
#else
Packit Service 82fcde
# define _NL_CURRENT_DEFINE_ABS(sym, val) #sym " = " #val
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#else
Packit Service 82fcde
Packit Service 82fcde
/* All categories are always loaded in the shared library, so there is no
Packit Service 82fcde
   point in having lots of separate symbols for linking.  */
Packit Service 82fcde
Packit Service 82fcde
/* Return a pointer to the current `struct __locale_data' for CATEGORY.  */
Packit Service 82fcde
# define _NL_CURRENT_DATA(category) \
Packit Service 82fcde
  (_NL_CURRENT_LOCALE->__locales[category])
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's string for ITEM.  */
Packit Service 82fcde
# define _NL_CURRENT(category, item) \
Packit Service 82fcde
  (_NL_CURRENT_DATA (category)->values[_NL_ITEM_INDEX (item)].string)
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's string for ITEM.  */
Packit Service 82fcde
# define _NL_CURRENT_WSTR(category, item) \
Packit Service 82fcde
  ((wchar_t *) _NL_CURRENT_DATA (category)->values[_NL_ITEM_INDEX (item)].wstr)
Packit Service 82fcde
Packit Service 82fcde
/* Extract the current CATEGORY locale's word for ITEM.  */
Packit Service 82fcde
# define _NL_CURRENT_WORD(category, item) \
Packit Service 82fcde
  ((uint32_t) _NL_CURRENT_DATA (category)->values[_NL_ITEM_INDEX (item)].word)
Packit Service 82fcde
Packit Service 82fcde
/* This is used in lc-CATEGORY.c to define _nl_current_CATEGORY.  */
Packit Service 82fcde
# define _NL_CURRENT_DEFINE(category) \
Packit Service 82fcde
  /* No per-category variable here. */
Packit Service 82fcde
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Extract CATEGORY locale's string for ITEM.  */
Packit Service 82fcde
static inline const char *
Packit Service 82fcde
_nl_lookup (locale_t l, int category, int item)
Packit Service 82fcde
{
Packit Service 82fcde
  return l->__locales[category]->values[_NL_ITEM_INDEX (item)].string;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
/* Extract CATEGORY locale's wide string for ITEM.  */
Packit Service 82fcde
static inline const wchar_t *
Packit Service 82fcde
_nl_lookup_wstr (locale_t l, int category, int item)
Packit Service 82fcde
{
Packit Service 82fcde
  return (wchar_t *) l->__locales[category]
Packit Service 82fcde
    ->values[_NL_ITEM_INDEX (item)].wstr;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
/* Extract the CATEGORY locale's word for ITEM.  */
Packit Service 82fcde
static inline uint32_t
Packit Service 82fcde
_nl_lookup_word (locale_t l, int category, int item)
Packit Service 82fcde
{
Packit Service 82fcde
  return l->__locales[category]->values[_NL_ITEM_INDEX (item)].word;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
/* Default search path if no LOCPATH environment variable.  */
Packit Service 82fcde
extern const char _nl_default_locale_path[] attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Load the locale data for CATEGORY from the file specified by *NAME.
Packit Service 82fcde
   If *NAME is "", use environment variables as specified by POSIX, and
Packit Service 82fcde
   fill in *NAME with the actual name used.  If LOCALE_PATH is not null,
Packit Service 82fcde
   those directories are searched for the locale files.  If it's null,
Packit Service 82fcde
   the locale archive is checked first and then _nl_default_locale_path
Packit Service 82fcde
   is searched for locale files.  */
Packit Service 82fcde
extern struct __locale_data *_nl_find_locale (const char *locale_path,
Packit Service 82fcde
					      size_t locale_path_len,
Packit Service 82fcde
					      int category, const char **name)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Try to load the file described by FILE.  */
Packit Service 82fcde
extern void _nl_load_locale (struct loaded_l10nfile *file, int category)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Free all resource.  */
Packit Service 82fcde
extern void _nl_unload_locale (struct __locale_data *locale) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Free the locale and give back all memory if the usage count is one.  */
Packit Service 82fcde
extern void _nl_remove_locale (int locale, struct __locale_data *data)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Find the locale *NAMEP in the locale archive, and return the
Packit Service 82fcde
   internalized data structure for its CATEGORY data.  If this locale has
Packit Service 82fcde
   already been loaded from the archive, just returns the existing data
Packit Service 82fcde
   structure.  If successful, sets *NAMEP to point directly into the mapped
Packit Service 82fcde
   archive string table; that way, the next call can short-circuit strcmp.  */
Packit Service 82fcde
extern struct __locale_data *_nl_load_locale_from_archive (int category,
Packit Service 82fcde
							   const char **namep)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Subroutine of setlocale's __libc_subfreeres hook.  */
Packit Service 82fcde
extern void _nl_archive_subfreeres (void) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Subroutine of gconv-db's __libc_subfreeres hook.  */
Packit Service 82fcde
extern void _nl_locale_subfreeres (void) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Validate the contents of a locale file and set up the in-core
Packit Service 82fcde
   data structure to point into the data.  This leaves the `alloc'
Packit Service 82fcde
   and `name' fields uninitialized, for the caller to fill in.
Packit Service 82fcde
   If any bogons are detected in the data, this will refuse to
Packit Service 82fcde
   intern it, and return a null pointer instead.  */
Packit Service 82fcde
extern struct __locale_data *_nl_intern_locale_data (int category,
Packit Service 82fcde
						     const void *data,
Packit Service 82fcde
						     size_t datasize)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Return `era' entry which corresponds to TP.  Used in strftime.  */
Packit Service 82fcde
extern struct era_entry *_nl_get_era_entry (const struct tm *tp,
Packit Service 82fcde
					    struct __locale_data *lc_time)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Return `era' cnt'th entry .  Used in strptime.  */
Packit Service 82fcde
extern struct era_entry *_nl_select_era_entry (int cnt,
Packit Service 82fcde
					       struct __locale_data *lc_time)
Packit Service 82fcde
	  attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Return `alt_digit' which corresponds to NUMBER.  Used in strftime.  */
Packit Service 82fcde
extern const char *_nl_get_alt_digit (unsigned int number,
Packit Service 82fcde
				      struct __locale_data *lc_time)
Packit Service 82fcde
	  attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Similar, but now for wide characters.  */
Packit Service 82fcde
extern const wchar_t *_nl_get_walt_digit (unsigned int number,
Packit Service 82fcde
					  struct __locale_data *lc_time)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Parse string as alternative digit and return numeric value.  */
Packit Service 82fcde
extern int _nl_parse_alt_digit (const char **strp,
Packit Service 82fcde
				struct __locale_data *lc_time)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Postload processing.  */
Packit Service 82fcde
extern void _nl_postload_ctype (void);
Packit Service 82fcde
Packit Service 82fcde
/* Functions used for the `private.cleanup' hook.  */
Packit Service 82fcde
extern void _nl_cleanup_time (struct __locale_data *) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#endif	/* localeinfo.h */