1 | /* A POSIX <locale.h>.
|
---|
2 | Copyright (C) 2007-2022 Free Software Foundation, Inc.
|
---|
3 |
|
---|
4 | This file is free software: you can redistribute it and/or modify
|
---|
5 | it under the terms of the GNU Lesser General Public License as
|
---|
6 | published by the Free Software Foundation; either version 2.1 of the
|
---|
7 | License, or (at your option) any later version.
|
---|
8 |
|
---|
9 | This file is distributed in the hope that it will be useful,
|
---|
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
12 | GNU Lesser General Public License for more details.
|
---|
13 |
|
---|
14 | You should have received a copy of the GNU Lesser General Public License
|
---|
15 | along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
---|
16 |
|
---|
17 | #if __GNUC__ >= 3
|
---|
18 | @PRAGMA_SYSTEM_HEADER@
|
---|
19 | #endif
|
---|
20 | @PRAGMA_COLUMNS@
|
---|
21 |
|
---|
22 | #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \
|
---|
23 | || defined _GL_ALREADY_INCLUDING_LOCALE_H
|
---|
24 |
|
---|
25 | /* Special invocation convention:
|
---|
26 | - Inside mingw header files,
|
---|
27 | - To handle Solaris header files (through Solaris 10) when combined
|
---|
28 | with gettext's libintl.h. */
|
---|
29 |
|
---|
30 | #@INCLUDE_NEXT@ @NEXT_LOCALE_H@
|
---|
31 |
|
---|
32 | #else
|
---|
33 | /* Normal invocation convention. */
|
---|
34 |
|
---|
35 | #ifndef _@GUARD_PREFIX@_LOCALE_H
|
---|
36 |
|
---|
37 | #define _GL_ALREADY_INCLUDING_LOCALE_H
|
---|
38 |
|
---|
39 | /* The include_next requires a split double-inclusion guard. */
|
---|
40 | #@INCLUDE_NEXT@ @NEXT_LOCALE_H@
|
---|
41 |
|
---|
42 | #undef _GL_ALREADY_INCLUDING_LOCALE_H
|
---|
43 |
|
---|
44 | #ifndef _@GUARD_PREFIX@_LOCALE_H
|
---|
45 | #define _@GUARD_PREFIX@_LOCALE_H
|
---|
46 |
|
---|
47 | /* NetBSD 5.0 mis-defines NULL. */
|
---|
48 | #include <stddef.h>
|
---|
49 |
|
---|
50 | /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */
|
---|
51 | #if @HAVE_XLOCALE_H@
|
---|
52 | # include <xlocale.h>
|
---|
53 | #endif
|
---|
54 |
|
---|
55 | /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
|
---|
56 |
|
---|
57 | /* The definition of _GL_ARG_NONNULL is copied here. */
|
---|
58 |
|
---|
59 | /* The definition of _GL_WARN_ON_USE is copied here. */
|
---|
60 |
|
---|
61 | /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C.
|
---|
62 | On systems that don't define it, use the same value as GNU libintl. */
|
---|
63 | #if !defined LC_MESSAGES
|
---|
64 | # define LC_MESSAGES 1729
|
---|
65 | #endif
|
---|
66 |
|
---|
67 | /* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and
|
---|
68 | int_n_*. Instead of overriding 'struct lconv', merely define these member
|
---|
69 | names as macros. This avoids trouble in C++ mode. */
|
---|
70 | #if defined _MSC_VER
|
---|
71 | # define int_p_cs_precedes p_cs_precedes
|
---|
72 | # define int_p_sign_posn p_sign_posn
|
---|
73 | # define int_p_sep_by_space p_sep_by_space
|
---|
74 | # define int_n_cs_precedes n_cs_precedes
|
---|
75 | # define int_n_sign_posn n_sign_posn
|
---|
76 | # define int_n_sep_by_space n_sep_by_space
|
---|
77 | #endif
|
---|
78 |
|
---|
79 | /* Bionic libc's 'struct lconv' is just a dummy. */
|
---|
80 | #if @REPLACE_STRUCT_LCONV@
|
---|
81 | # define lconv rpl_lconv
|
---|
82 | struct lconv
|
---|
83 | {
|
---|
84 | /* All 'char *' are actually 'const char *'. */
|
---|
85 |
|
---|
86 | /* Members that depend on the LC_NUMERIC category of the locale. See
|
---|
87 | <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */
|
---|
88 |
|
---|
89 | /* Symbol used as decimal point. */
|
---|
90 | char *decimal_point;
|
---|
91 | /* Symbol used to separate groups of digits to the left of the decimal
|
---|
92 | point. */
|
---|
93 | char *thousands_sep;
|
---|
94 | /* Definition of the size of groups of digits to the left of the decimal
|
---|
95 | point. */
|
---|
96 | char *grouping;
|
---|
97 |
|
---|
98 | /* Members that depend on the LC_MONETARY category of the locale. See
|
---|
99 | <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */
|
---|
100 |
|
---|
101 | /* Symbol used as decimal point. */
|
---|
102 | char *mon_decimal_point;
|
---|
103 | /* Symbol used to separate groups of digits to the left of the decimal
|
---|
104 | point. */
|
---|
105 | char *mon_thousands_sep;
|
---|
106 | /* Definition of the size of groups of digits to the left of the decimal
|
---|
107 | point. */
|
---|
108 | char *mon_grouping;
|
---|
109 | /* Sign used to indicate a value >= 0. */
|
---|
110 | char *positive_sign;
|
---|
111 | /* Sign used to indicate a value < 0. */
|
---|
112 | char *negative_sign;
|
---|
113 |
|
---|
114 | /* For formatting local currency. */
|
---|
115 | /* Currency symbol (3 characters) followed by separator (1 character). */
|
---|
116 | char *currency_symbol;
|
---|
117 | /* Number of digits after the decimal point. */
|
---|
118 | char frac_digits;
|
---|
119 | /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
|
---|
120 | comes after the number. */
|
---|
121 | char p_cs_precedes;
|
---|
122 | /* For values >= 0: Position of the sign. */
|
---|
123 | char p_sign_posn;
|
---|
124 | /* For values >= 0: Placement of spaces between currency symbol, sign, and
|
---|
125 | number. */
|
---|
126 | char p_sep_by_space;
|
---|
127 | /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
|
---|
128 | comes after the number. */
|
---|
129 | char n_cs_precedes;
|
---|
130 | /* For values < 0: Position of the sign. */
|
---|
131 | char n_sign_posn;
|
---|
132 | /* For values < 0: Placement of spaces between currency symbol, sign, and
|
---|
133 | number. */
|
---|
134 | char n_sep_by_space;
|
---|
135 |
|
---|
136 | /* For formatting international currency. */
|
---|
137 | /* Currency symbol (3 characters) followed by separator (1 character). */
|
---|
138 | char *int_curr_symbol;
|
---|
139 | /* Number of digits after the decimal point. */
|
---|
140 | char int_frac_digits;
|
---|
141 | /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
|
---|
142 | comes after the number. */
|
---|
143 | char int_p_cs_precedes;
|
---|
144 | /* For values >= 0: Position of the sign. */
|
---|
145 | char int_p_sign_posn;
|
---|
146 | /* For values >= 0: Placement of spaces between currency symbol, sign, and
|
---|
147 | number. */
|
---|
148 | char int_p_sep_by_space;
|
---|
149 | /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
|
---|
150 | comes after the number. */
|
---|
151 | char int_n_cs_precedes;
|
---|
152 | /* For values < 0: Position of the sign. */
|
---|
153 | char int_n_sign_posn;
|
---|
154 | /* For values < 0: Placement of spaces between currency symbol, sign, and
|
---|
155 | number. */
|
---|
156 | char int_n_sep_by_space;
|
---|
157 | };
|
---|
158 | #endif
|
---|
159 |
|
---|
160 | #if @GNULIB_LOCALECONV@
|
---|
161 | # if @REPLACE_LOCALECONV@
|
---|
162 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
---|
163 | # undef localeconv
|
---|
164 | # define localeconv rpl_localeconv
|
---|
165 | # endif
|
---|
166 | _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void));
|
---|
167 | _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void));
|
---|
168 | # else
|
---|
169 | _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void));
|
---|
170 | # endif
|
---|
171 | # if __GLIBC__ >= 2
|
---|
172 | _GL_CXXALIASWARN (localeconv);
|
---|
173 | # endif
|
---|
174 | #elif @REPLACE_STRUCT_LCONV@
|
---|
175 | # undef localeconv
|
---|
176 | # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv
|
---|
177 | #elif defined GNULIB_POSIXCHECK
|
---|
178 | # undef localeconv
|
---|
179 | # if HAVE_RAW_DECL_LOCALECONV
|
---|
180 | _GL_WARN_ON_USE (localeconv,
|
---|
181 | "localeconv returns too few information on some platforms - "
|
---|
182 | "use gnulib module localeconv for portability");
|
---|
183 | # endif
|
---|
184 | #endif
|
---|
185 |
|
---|
186 | #if @GNULIB_SETLOCALE@
|
---|
187 | # if @REPLACE_SETLOCALE@
|
---|
188 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
---|
189 | # undef setlocale
|
---|
190 | # define setlocale rpl_setlocale
|
---|
191 | # define GNULIB_defined_setlocale 1
|
---|
192 | # endif
|
---|
193 | _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale));
|
---|
194 | _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale));
|
---|
195 | # else
|
---|
196 | _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale));
|
---|
197 | # endif
|
---|
198 | # if __GLIBC__ >= 2
|
---|
199 | _GL_CXXALIASWARN (setlocale);
|
---|
200 | # endif
|
---|
201 | #elif defined GNULIB_POSIXCHECK
|
---|
202 | # undef setlocale
|
---|
203 | # if HAVE_RAW_DECL_SETLOCALE
|
---|
204 | _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - "
|
---|
205 | "use gnulib module setlocale for portability");
|
---|
206 | # endif
|
---|
207 | #endif
|
---|
208 |
|
---|
209 | #if @GNULIB_SETLOCALE_NULL@
|
---|
210 | /* Included here for convenience. */
|
---|
211 | # include "setlocale_null.h"
|
---|
212 | #endif
|
---|
213 |
|
---|
214 | #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@)
|
---|
215 | # if @REPLACE_NEWLOCALE@
|
---|
216 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
---|
217 | # undef newlocale
|
---|
218 | # define newlocale rpl_newlocale
|
---|
219 | # define GNULIB_defined_newlocale 1
|
---|
220 | # endif
|
---|
221 | _GL_FUNCDECL_RPL (newlocale, locale_t,
|
---|
222 | (int category_mask, const char *name, locale_t base)
|
---|
223 | _GL_ARG_NONNULL ((2)));
|
---|
224 | _GL_CXXALIAS_RPL (newlocale, locale_t,
|
---|
225 | (int category_mask, const char *name, locale_t base));
|
---|
226 | # else
|
---|
227 | # if @HAVE_NEWLOCALE@
|
---|
228 | _GL_CXXALIAS_SYS (newlocale, locale_t,
|
---|
229 | (int category_mask, const char *name, locale_t base));
|
---|
230 | # endif
|
---|
231 | # endif
|
---|
232 | # if @HAVE_NEWLOCALE@
|
---|
233 | _GL_CXXALIASWARN (newlocale);
|
---|
234 | # endif
|
---|
235 | # if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@
|
---|
236 | # ifndef HAVE_WORKING_NEWLOCALE
|
---|
237 | # define HAVE_WORKING_NEWLOCALE 1
|
---|
238 | # endif
|
---|
239 | # endif
|
---|
240 | #elif defined GNULIB_POSIXCHECK
|
---|
241 | # undef newlocale
|
---|
242 | # if HAVE_RAW_DECL_NEWLOCALE
|
---|
243 | _GL_WARN_ON_USE (newlocale, "newlocale is not portable");
|
---|
244 | # endif
|
---|
245 | #endif
|
---|
246 |
|
---|
247 | #if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@)
|
---|
248 | # if @REPLACE_DUPLOCALE@
|
---|
249 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
---|
250 | # undef duplocale
|
---|
251 | # define duplocale rpl_duplocale
|
---|
252 | # define GNULIB_defined_duplocale 1
|
---|
253 | # endif
|
---|
254 | _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1)));
|
---|
255 | _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale));
|
---|
256 | # else
|
---|
257 | # if @HAVE_DUPLOCALE@
|
---|
258 | _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale));
|
---|
259 | # endif
|
---|
260 | # endif
|
---|
261 | # if @HAVE_DUPLOCALE@
|
---|
262 | _GL_CXXALIASWARN (duplocale);
|
---|
263 | # endif
|
---|
264 | # if @HAVE_DUPLOCALE@ || @REPLACE_DUPLOCALE@
|
---|
265 | # ifndef HAVE_WORKING_DUPLOCALE
|
---|
266 | # define HAVE_WORKING_DUPLOCALE 1
|
---|
267 | # endif
|
---|
268 | # endif
|
---|
269 | #elif defined GNULIB_POSIXCHECK
|
---|
270 | # undef duplocale
|
---|
271 | # if HAVE_RAW_DECL_DUPLOCALE
|
---|
272 | _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - "
|
---|
273 | "use gnulib module duplocale for portability");
|
---|
274 | # endif
|
---|
275 | #endif
|
---|
276 |
|
---|
277 | #if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@)
|
---|
278 | # if @REPLACE_FREELOCALE@
|
---|
279 | # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
---|
280 | # undef freelocale
|
---|
281 | # define freelocale rpl_freelocale
|
---|
282 | # define GNULIB_defined_freelocale 1
|
---|
283 | # endif
|
---|
284 | _GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1)));
|
---|
285 | _GL_CXXALIAS_RPL (freelocale, void, (locale_t locale));
|
---|
286 | # else
|
---|
287 | # if @HAVE_FREELOCALE@
|
---|
288 | /* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is
|
---|
289 | int. */
|
---|
290 | _GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale));
|
---|
291 | # endif
|
---|
292 | # endif
|
---|
293 | # if @HAVE_FREELOCALE@
|
---|
294 | _GL_CXXALIASWARN (freelocale);
|
---|
295 | # endif
|
---|
296 | #elif defined GNULIB_POSIXCHECK
|
---|
297 | # undef freelocale
|
---|
298 | # if HAVE_RAW_DECL_FREELOCALE
|
---|
299 | _GL_WARN_ON_USE (freelocale, "freelocale is not portable");
|
---|
300 | # endif
|
---|
301 | #endif
|
---|
302 |
|
---|
303 | #endif /* _@GUARD_PREFIX@_LOCALE_H */
|
---|
304 | #endif /* _@GUARD_PREFIX@_LOCALE_H */
|
---|
305 | #endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */
|
---|