1 /* A POSIX <locale.h>. 2 Copyright (C) 2007-2020 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program 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 General Public License for more details. 13 14 You should have received a copy of the GNU 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@ && @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@ && @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@ && @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) */ 306