(root)/
glibc-2.38/
locale/
programs/
localedef.h
       1  /* General definitions for localedef(1).
       2     Copyright (C) 1998-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     This program is free software; you can redistribute it and/or modify
       6     it under the terms of the GNU General Public License as published
       7     by the Free Software Foundation; version 2 of the License, or
       8     (at your option) any later version.
       9  
      10     This program is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13     GNU General Public License for more details.
      14  
      15     You should have received a copy of the GNU General Public License
      16     along with this program; if not, see <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifndef _LOCALEDEF_H
      19  #define _LOCALEDEF_H	1
      20  
      21  /* Get the basic locale definitions.  */
      22  #include <errno.h>
      23  #include <locale.h>
      24  #include <stdbool.h>
      25  #include <stddef.h>
      26  #include <stdarg.h>
      27  #include <stdio.h>
      28  #include <stdlib.h>
      29  
      30  #include "record-status.h"
      31  #include "repertoire.h"
      32  #include "../locarchive.h"
      33  
      34  
      35  /* We need a bitmask for the locales.  */
      36  enum
      37  {
      38    CTYPE_LOCALE = 1 << LC_CTYPE,
      39    NUMERIC_LOCALE = 1 << LC_NUMERIC,
      40    TIME_LOCALE = 1 << LC_TIME,
      41    COLLATE_LOCALE = 1 << LC_COLLATE,
      42    MONETARY_LOCALE = 1 << LC_MONETARY,
      43    MESSAGES_LOCALE = 1 << LC_MESSAGES,
      44    PAPER_LOCALE = 1 << LC_PAPER,
      45    NAME_LOCALE = 1 << LC_NAME,
      46    ADDRESS_LOCALE = 1 << LC_ADDRESS,
      47    TELEPHONE_LOCALE = 1 << LC_TELEPHONE,
      48    MEASUREMENT_LOCALE = 1 << LC_MEASUREMENT,
      49    IDENTIFICATION_LOCALE = 1 << LC_IDENTIFICATION,
      50    ALL_LOCALES = (1 << LC_CTYPE
      51  		 | 1 << LC_NUMERIC
      52  		 | 1 << LC_TIME
      53  		 | 1 << LC_COLLATE
      54  		 | 1 << LC_MONETARY
      55  		 | 1 << LC_MESSAGES
      56  		 | 1 << LC_PAPER
      57  		 | 1 << LC_NAME
      58  		 | 1 << LC_ADDRESS
      59  		 | 1 << LC_TELEPHONE
      60  		 | 1 << LC_MEASUREMENT
      61  		 | 1 << LC_IDENTIFICATION)
      62  };
      63  
      64  
      65  /* Opaque types for the different locales.  */
      66  struct locale_ctype_t;
      67  struct locale_collate_t;
      68  struct locale_monetary_t;
      69  struct locale_numeric_t;
      70  struct locale_time_t;
      71  struct locale_messages_t;
      72  struct locale_paper_t;
      73  struct locale_name_t;
      74  struct locale_address_t;
      75  struct locale_telephone_t;
      76  struct locale_measurement_t;
      77  struct locale_identification_t;
      78  
      79  
      80  /* Definitions for the locale.  */
      81  struct localedef_t
      82  {
      83    struct localedef_t *next;
      84  
      85    const char *name;
      86  
      87    int needed;
      88    int avail;
      89  
      90    union
      91    {
      92      void *generic;
      93      struct locale_ctype_t *ctype;
      94      struct locale_collate_t *collate;
      95      struct locale_monetary_t *monetary;
      96      struct locale_numeric_t *numeric;
      97      struct locale_time_t *time;
      98      struct locale_messages_t *messages;
      99      struct locale_paper_t *paper;
     100      struct locale_name_t *name;
     101      struct locale_address_t *address;
     102      struct locale_telephone_t *telephone;
     103      struct locale_measurement_t *measurement;
     104      struct locale_identification_t *identification;
     105    } categories[__LC_LAST];
     106  
     107    size_t len[__LC_LAST];
     108  
     109    const char *copy_name[__LC_LAST];
     110  
     111    const char *repertoire_name;
     112  };
     113  
     114  
     115  /* Global variables of the localedef program.  */
     116  extern const char *repertoire_global;
     117  extern int max_locarchive_open_retry;
     118  extern bool no_archive;
     119  extern const char *alias_file;
     120  extern bool hard_links;
     121  
     122  
     123  /* Prototypes for a few program-wide used functions.  */
     124  #include <programs/xmalloc.h>
     125  #include <programs/xasprintf.h>
     126  
     127  
     128  /* Mark given locale as to be read.  */
     129  extern struct localedef_t *add_to_readlist (int locale, const char *name,
     130  					    const char *repertoire_name,
     131  					    int generate,
     132  					    struct localedef_t *copy_locale);
     133  
     134  /* Find the information for the locale NAME.  */
     135  extern struct localedef_t *find_locale (int locale, const char *name,
     136  					const char *repertoire_name,
     137  					const struct charmap_t *charmap);
     138  
     139  /* Load (if necessary) the information for the locale NAME.  */
     140  extern struct localedef_t *load_locale (int locale, const char *name,
     141  					const char *repertoire_name,
     142  					const struct charmap_t *charmap,
     143  					struct localedef_t *copy_locale);
     144  
     145  
     146  /* Open the locale archive.  */
     147  extern void open_archive (struct locarhandle *ah, bool readonly);
     148  
     149  /* Close the locale archive.  */
     150  extern void close_archive (struct locarhandle *ah);
     151  
     152  /* Add given locale data to the archive.  */
     153  extern int add_locale_to_archive (struct locarhandle *ah, const char *name,
     154  				  locale_data_t data, bool replace);
     155  
     156  /* Add content of named directories to locale archive.  */
     157  extern int add_locales_to_archive (size_t nlist, char *list[], bool replace);
     158  
     159  /* Removed named locales from archive.  */
     160  extern int delete_locales_from_archive (size_t nlist, char *list[]);
     161  
     162  /* List content of locale archive. If FNAME is non-null use that as
     163     the locale archive to list, otherwise the default.  */
     164  extern void show_archive_content (const char *fname,
     165  				  int verbose) __attribute__ ((noreturn));
     166  
     167  #endif /* localedef.h */