23
23
// Variadic functions may be implemented as templates with a parameter pack instead
24
24
// of C-style variadic functions.
25
25
//
26
+ // Most of these functions are only required when building the library. Functions that are also
27
+ // required when merely using the headers are marked as such below.
28
+ //
26
29
// TODO: __localeconv shouldn't take a reference, but the Windows implementation doesn't allow copying __locale_t
30
+ // TODO: Eliminate the need for any of these functions from the headers.
27
31
//
28
32
// Locale management
29
33
// -----------------
30
34
// namespace __locale {
31
- // using __locale_t = implementation-defined;
35
+ // using __locale_t = implementation-defined; // required by the headers
32
36
// using __lconv_t = implementation-defined;
33
37
// __locale_t __newlocale(int, const char*, __locale_t);
34
38
// void __freelocale(__locale_t);
35
39
// char* __setlocale(int, const char*);
36
40
// __lconv_t* __localeconv(__locale_t&);
37
41
// }
38
42
//
43
+ // // required by the headers
39
44
// #define _LIBCPP_COLLATE_MASK /* implementation-defined */
40
45
// #define _LIBCPP_CTYPE_MASK /* implementation-defined */
41
46
// #define _LIBCPP_MONETARY_MASK /* implementation-defined */
48
53
// Strtonum functions
49
54
// ------------------
50
55
// namespace __locale {
56
+ // // required by the headers
51
57
// float __strtof(const char*, char**, __locale_t);
52
58
// double __strtod(const char*, char**, __locale_t);
53
59
// long double __strtold(const char*, char**, __locale_t);
60
66
// namespace __locale {
61
67
// int __islower(int, __locale_t);
62
68
// int __isupper(int, __locale_t);
63
- // int __isdigit(int, __locale_t);
64
- // int __isxdigit(int, __locale_t);
69
+ // int __isdigit(int, __locale_t); // required by the headers
70
+ // int __isxdigit(int, __locale_t); // required by the headers
65
71
// int __toupper(int, __locale_t);
66
72
// int __tolower(int, __locale_t);
67
73
// int __strcoll(const char*, const char*, __locale_t);
99
105
// int __mbtowc(wchar_t*, const char*, size_t, __locale_t);
100
106
// size_t __mbrlen(const char*, size_t, mbstate_t*, __locale_t);
101
107
// size_t __mbsrtowcs(wchar_t*, const char**, size_t, mbstate_t*, __locale_t);
102
- // int __snprintf(char*, size_t, __locale_t, const char*, ...);
103
- // int __asprintf(char**, __locale_t, const char*, ...);
104
- // int __sscanf(const char*, __locale_t, const char*, ...);
108
+ //
109
+ // int __snprintf(char*, size_t, __locale_t, const char*, ...); // required by the headers
110
+ // int __asprintf(char**, __locale_t, const char*, ...); // required by the headers
111
+ // int __sscanf(const char*, __locale_t, const char*, ...); // required by the headers
105
112
// }
106
113
107
114
#if defined(__APPLE__)
@@ -143,8 +150,19 @@ namespace __locale {
143
150
//
144
151
// Locale management
145
152
//
153
+ # define _LIBCPP_COLLATE_MASK LC_COLLATE_MASK
154
+ # define _LIBCPP_CTYPE_MASK LC_CTYPE_MASK
155
+ # define _LIBCPP_MONETARY_MASK LC_MONETARY_MASK
156
+ # define _LIBCPP_NUMERIC_MASK LC_NUMERIC_MASK
157
+ # define _LIBCPP_TIME_MASK LC_TIME_MASK
158
+ # define _LIBCPP_MESSAGES_MASK LC_MESSAGES_MASK
159
+ # define _LIBCPP_ALL_MASK LC_ALL_MASK
160
+ # define _LIBCPP_LC_ALL LC_ALL
161
+
146
162
using __locale_t _LIBCPP_NODEBUG = locale_t ;
147
- using __lconv_t _LIBCPP_NODEBUG = lconv ;
163
+
164
+ # if defined(_LIBCPP_BUILDING_LIBRARY)
165
+ using __lconv_t _LIBCPP_NODEBUG = lconv ;
148
166
149
167
inline _LIBCPP_HIDE_FROM_ABI __locale_t __newlocale (int __category_mask, const char * __name, __locale_t __loc) {
150
168
return newlocale (__category_mask, __name, __loc);
@@ -157,15 +175,7 @@ inline _LIBCPP_HIDE_FROM_ABI char* __setlocale(int __category, char const* __loc
157
175
inline _LIBCPP_HIDE_FROM_ABI void __freelocale (__locale_t __loc) { freelocale (__loc); }
158
176
159
177
inline _LIBCPP_HIDE_FROM_ABI __lconv_t * __localeconv (__locale_t & __loc) { return __libcpp_localeconv_l (__loc); }
160
-
161
- # define _LIBCPP_COLLATE_MASK LC_COLLATE_MASK
162
- # define _LIBCPP_CTYPE_MASK LC_CTYPE_MASK
163
- # define _LIBCPP_MONETARY_MASK LC_MONETARY_MASK
164
- # define _LIBCPP_NUMERIC_MASK LC_NUMERIC_MASK
165
- # define _LIBCPP_TIME_MASK LC_TIME_MASK
166
- # define _LIBCPP_MESSAGES_MASK LC_MESSAGES_MASK
167
- # define _LIBCPP_ALL_MASK LC_ALL_MASK
168
- # define _LIBCPP_LC_ALL LC_ALL
178
+ # endif // _LIBCPP_BUILDING_LIBRARY
169
179
170
180
//
171
181
// Strtonum functions
@@ -194,10 +204,15 @@ __strtoull(const char* __nptr, char** __endptr, int __base, __locale_t __loc) {
194
204
//
195
205
// Character manipulation functions
196
206
//
207
+ # if defined(_LIBCPP_BUILDING_LIBRARY)
197
208
inline _LIBCPP_HIDE_FROM_ABI int __islower (int __ch, __locale_t __loc) { return islower_l (__ch, __loc); }
198
209
inline _LIBCPP_HIDE_FROM_ABI int __isupper (int __ch, __locale_t __loc) { return isupper_l (__ch, __loc); }
210
+ # endif
211
+
199
212
inline _LIBCPP_HIDE_FROM_ABI int __isdigit (int __ch, __locale_t __loc) { return isdigit_l (__ch, __loc); }
200
213
inline _LIBCPP_HIDE_FROM_ABI int __isxdigit (int __ch, __locale_t __loc) { return isxdigit_l (__ch, __loc); }
214
+
215
+ # if defined(_LIBCPP_BUILDING_LIBRARY)
201
216
inline _LIBCPP_HIDE_FROM_ABI int __strcoll (const char * __s1, const char * __s2, __locale_t __loc) {
202
217
return strcoll_l (__s1, __s2, __loc);
203
218
}
@@ -207,7 +222,7 @@ inline _LIBCPP_HIDE_FROM_ABI size_t __strxfrm(char* __dest, const char* __src, s
207
222
inline _LIBCPP_HIDE_FROM_ABI int __toupper (int __ch, __locale_t __loc) { return toupper_l (__ch, __loc); }
208
223
inline _LIBCPP_HIDE_FROM_ABI int __tolower (int __ch, __locale_t __loc) { return tolower_l (__ch, __loc); }
209
224
210
- # if _LIBCPP_HAS_WIDE_CHARACTERS
225
+ # if _LIBCPP_HAS_WIDE_CHARACTERS
211
226
inline _LIBCPP_HIDE_FROM_ABI int __wcscoll (const wchar_t * __s1, const wchar_t * __s2, __locale_t __loc) {
212
227
return wcscoll_l (__s1, __s2, __loc);
213
228
}
@@ -229,7 +244,7 @@ inline _LIBCPP_HIDE_FROM_ABI int __iswpunct(wint_t __ch, __locale_t __loc) { ret
229
244
inline _LIBCPP_HIDE_FROM_ABI int __iswxdigit (wint_t __ch, __locale_t __loc) { return iswxdigit_l (__ch, __loc); }
230
245
inline _LIBCPP_HIDE_FROM_ABI wint_t __towupper (wint_t __ch, __locale_t __loc) { return towupper_l (__ch, __loc); }
231
246
inline _LIBCPP_HIDE_FROM_ABI wint_t __towlower (wint_t __ch, __locale_t __loc) { return towlower_l (__ch, __loc); }
232
- # endif
247
+ # endif
233
248
234
249
inline _LIBCPP_HIDE_FROM_ABI size_t
235
250
__strftime (char * __s, size_t __max, const char * __format, const tm * __tm, __locale_t __loc) {
@@ -242,7 +257,7 @@ __strftime(char* __s, size_t __max, const char* __format, const tm* __tm, __loca
242
257
inline _LIBCPP_HIDE_FROM_ABI decltype (__libcpp_mb_cur_max_l(__locale_t ())) __mb_len_max(__locale_t __loc) {
243
258
return __libcpp_mb_cur_max_l (__loc);
244
259
}
245
- # if _LIBCPP_HAS_WIDE_CHARACTERS
260
+ # if _LIBCPP_HAS_WIDE_CHARACTERS
246
261
inline _LIBCPP_HIDE_FROM_ABI wint_t __btowc (int __ch, __locale_t __loc) { return __libcpp_btowc_l (__ch, __loc); }
247
262
inline _LIBCPP_HIDE_FROM_ABI int __wctob (wint_t __ch, __locale_t __loc) { return __libcpp_wctob_l (__ch, __loc); }
248
263
inline _LIBCPP_HIDE_FROM_ABI size_t
@@ -270,7 +285,8 @@ inline _LIBCPP_HIDE_FROM_ABI size_t
270
285
__mbsrtowcs (wchar_t * __dest, const char ** __src, size_t __len, mbstate_t * __ps, __locale_t __loc) {
271
286
return __libcpp_mbsrtowcs_l (__dest, __src, __len, __ps, __loc);
272
287
}
273
- # endif
288
+ # endif // _LIBCPP_HAS_WIDE_CHARACTERS
289
+ # endif // _LIBCPP_BUILDING_LIBRARY
274
290
275
291
_LIBCPP_DIAGNOSTIC_PUSH
276
292
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED (" -Wgcc-compat" )
0 commit comments