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. */
36enum
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. */
66struct locale_ctype_t;
67struct locale_collate_t;
68struct locale_monetary_t;
69struct locale_numeric_t;
70struct locale_time_t;
71struct locale_messages_t;
72struct locale_paper_t;
73struct locale_name_t;
74struct locale_address_t;
75struct locale_telephone_t;
76struct locale_measurement_t;
77struct locale_identification_t;
78
79
80/* Definitions for the locale. */
81struct 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. */
116extern const char *repertoire_global;
117extern int max_locarchive_open_retry;
118extern bool no_archive;
119extern const char *alias_file;
120extern 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. */
129extern 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. */
135extern 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. */
140extern 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. */
147extern void open_archive (struct locarhandle *ah, bool readonly);
148
149/* Close the locale archive. */
150extern void close_archive (struct locarhandle *ah);
151
152/* Add given locale data to the archive. */
153extern 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. */
157extern int add_locales_to_archive (size_t nlist, char *list[], bool replace);
158
159/* Removed named locales from archive. */
160extern 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. */
164extern void show_archive_content (const char *fname,
165 int verbose) __attribute__ ((noreturn));
166
167#endif /* localedef.h */
168

source code of glibc/locale/programs/localedef.h