1 /* General definitions for localedef(1). 2 Copyright (C) 1998-2022 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 */ 168