[rtsan] Remove mkfifoat interceptor (#116997)
[llvm-project.git] / libcxx / include / __locale_dir / support / bsd_like.h
blobcce6de64673b0e8eb1c8ef7a84e84d940d909de0
1 //===-----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef _LIBCPP___LOCALE_DIR_SUPPORT_BSD_LIKE_H
10 #define _LIBCPP___LOCALE_DIR_SUPPORT_BSD_LIKE_H
12 #include <__config>
13 #include <__cstddef/size_t.h>
14 #include <__std_mbstate_t.h>
15 #include <__utility/forward.h>
16 #include <clocale> // std::lconv
17 #include <ctype.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <time.h>
22 #if _LIBCPP_HAS_WIDE_CHARACTERS
23 # include <wchar.h>
24 # include <wctype.h>
25 #endif
27 #include <xlocale.h>
29 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
30 # pragma GCC system_header
31 #endif
33 _LIBCPP_BEGIN_NAMESPACE_STD
34 namespace __locale {
37 // Locale management
39 using __locale_t = ::locale_t;
41 inline _LIBCPP_HIDE_FROM_ABI __locale_t __uselocale(__locale_t __loc) { return ::uselocale(__loc); }
43 inline _LIBCPP_HIDE_FROM_ABI __locale_t __newlocale(int __category_mask, const char* __locale, __locale_t __base) {
44 return ::newlocale(__category_mask, __locale, __base);
47 inline _LIBCPP_HIDE_FROM_ABI void __freelocale(__locale_t __loc) { ::freelocale(__loc); }
49 inline _LIBCPP_HIDE_FROM_ABI lconv* __localeconv(__locale_t& __loc) { return ::localeconv_l(__loc); }
52 // Strtonum functions
54 inline _LIBCPP_HIDE_FROM_ABI float __strtof(const char* __nptr, char** __endptr, __locale_t __loc) {
55 return ::strtof_l(__nptr, __endptr, __loc);
58 inline _LIBCPP_HIDE_FROM_ABI double __strtod(const char* __nptr, char** __endptr, __locale_t __loc) {
59 return ::strtod_l(__nptr, __endptr, __loc);
62 inline _LIBCPP_HIDE_FROM_ABI long double __strtold(const char* __nptr, char** __endptr, __locale_t __loc) {
63 return ::strtold_l(__nptr, __endptr, __loc);
66 inline _LIBCPP_HIDE_FROM_ABI long long __strtoll(const char* __nptr, char** __endptr, int __base, __locale_t __loc) {
67 return ::strtoll_l(__nptr, __endptr, __base, __loc);
70 inline _LIBCPP_HIDE_FROM_ABI unsigned long long
71 __strtoull(const char* __nptr, char** __endptr, int __base, __locale_t __loc) {
72 return ::strtoull_l(__nptr, __endptr, __base, __loc);
76 // Character manipulation functions
78 inline _LIBCPP_HIDE_FROM_ABI int __islower(int __c, __locale_t __loc) { return ::islower_l(__c, __loc); }
80 inline _LIBCPP_HIDE_FROM_ABI int __isupper(int __c, __locale_t __loc) { return ::isupper_l(__c, __loc); }
82 inline _LIBCPP_HIDE_FROM_ABI int __isdigit(int __c, __locale_t __loc) { return ::isdigit_l(__c, __loc); }
84 inline _LIBCPP_HIDE_FROM_ABI int __isxdigit(int __c, __locale_t __loc) { return ::isxdigit_l(__c, __loc); }
86 inline _LIBCPP_HIDE_FROM_ABI int __toupper(int __c, __locale_t __loc) { return ::toupper_l(__c, __loc); }
88 inline _LIBCPP_HIDE_FROM_ABI int __tolower(int __c, __locale_t __loc) { return ::tolower_l(__c, __loc); }
90 inline _LIBCPP_HIDE_FROM_ABI int __strcoll(const char* __s1, const char* __s2, __locale_t __loc) {
91 return ::strcoll_l(__s1, __s2, __loc);
94 inline _LIBCPP_HIDE_FROM_ABI size_t __strxfrm(char* __dest, const char* __src, size_t __n, __locale_t __loc) {
95 return ::strxfrm_l(__dest, __src, __n, __loc);
98 #if _LIBCPP_HAS_WIDE_CHARACTERS
99 inline _LIBCPP_HIDE_FROM_ABI int __iswspace(wint_t __c, __locale_t __loc) { return ::iswspace_l(__c, __loc); }
101 inline _LIBCPP_HIDE_FROM_ABI int __iswprint(wint_t __c, __locale_t __loc) { return ::iswprint_l(__c, __loc); }
103 inline _LIBCPP_HIDE_FROM_ABI int __iswcntrl(wint_t __c, __locale_t __loc) { return ::iswcntrl_l(__c, __loc); }
105 inline _LIBCPP_HIDE_FROM_ABI int __iswupper(wint_t __c, __locale_t __loc) { return ::iswupper_l(__c, __loc); }
107 inline _LIBCPP_HIDE_FROM_ABI int __iswlower(wint_t __c, __locale_t __loc) { return ::iswlower_l(__c, __loc); }
109 inline _LIBCPP_HIDE_FROM_ABI int __iswalpha(wint_t __c, __locale_t __loc) { return ::iswalpha_l(__c, __loc); }
111 inline _LIBCPP_HIDE_FROM_ABI int __iswblank(wint_t __c, __locale_t __loc) { return ::iswblank_l(__c, __loc); }
113 inline _LIBCPP_HIDE_FROM_ABI int __iswdigit(wint_t __c, __locale_t __loc) { return ::iswdigit_l(__c, __loc); }
115 inline _LIBCPP_HIDE_FROM_ABI int __iswpunct(wint_t __c, __locale_t __loc) { return ::iswpunct_l(__c, __loc); }
117 inline _LIBCPP_HIDE_FROM_ABI int __iswxdigit(wint_t __c, __locale_t __loc) { return ::iswxdigit_l(__c, __loc); }
119 inline _LIBCPP_HIDE_FROM_ABI wint_t __towupper(wint_t __c, __locale_t __loc) { return ::towupper_l(__c, __loc); }
121 inline _LIBCPP_HIDE_FROM_ABI wint_t __towlower(wint_t __c, __locale_t __loc) { return ::towlower_l(__c, __loc); }
123 inline _LIBCPP_HIDE_FROM_ABI int __wcscoll(const wchar_t* __ws1, const wchar_t* __ws2, __locale_t __loc) {
124 return ::wcscoll_l(__ws1, __ws2, __loc);
127 inline _LIBCPP_HIDE_FROM_ABI size_t __wcsxfrm(wchar_t* __dest, const wchar_t* __src, size_t __n, __locale_t __loc) {
128 return ::wcsxfrm_l(__dest, __src, __n, __loc);
130 #endif // _LIBCPP_HAS_WIDE_CHARACTERS
132 inline _LIBCPP_HIDE_FROM_ABI size_t
133 __strftime(char* __s, size_t __max, const char* __format, const struct tm* __tm, __locale_t __loc) {
134 return ::strftime_l(__s, __max, __format, __tm, __loc);
138 // Other functions
140 inline _LIBCPP_HIDE_FROM_ABI decltype(MB_CUR_MAX) __mb_len_max(__locale_t __loc) { return MB_CUR_MAX_L(__loc); }
142 #if _LIBCPP_HAS_WIDE_CHARACTERS
143 inline _LIBCPP_HIDE_FROM_ABI wint_t __btowc(int __c, __locale_t __loc) { return ::btowc_l(__c, __loc); }
145 inline _LIBCPP_HIDE_FROM_ABI int __wctob(wint_t __c, __locale_t __loc) { return ::wctob_l(__c, __loc); }
147 inline _LIBCPP_HIDE_FROM_ABI size_t
148 __wcsnrtombs(char* __dest, const wchar_t** __src, size_t __nwc, size_t __len, mbstate_t* __ps, __locale_t __loc) {
149 return ::wcsnrtombs_l(__dest, __src, __nwc, __len, __ps, __loc);
152 inline _LIBCPP_HIDE_FROM_ABI size_t __wcrtomb(char* __s, wchar_t __wc, mbstate_t* __ps, __locale_t __loc) {
153 return ::wcrtomb_l(__s, __wc, __ps, __loc);
156 inline _LIBCPP_HIDE_FROM_ABI size_t
157 __mbsnrtowcs(wchar_t* __dest, const char** __src, size_t __nms, size_t __len, mbstate_t* __ps, __locale_t __loc) {
158 return ::mbsnrtowcs_l(__dest, __src, __nms, __len, __ps, __loc);
161 inline _LIBCPP_HIDE_FROM_ABI size_t
162 __mbrtowc(wchar_t* __pwc, const char* __s, size_t __n, mbstate_t* __ps, __locale_t __loc) {
163 return ::mbrtowc_l(__pwc, __s, __n, __ps, __loc);
166 inline _LIBCPP_HIDE_FROM_ABI int __mbtowc(wchar_t* __pwc, const char* __pmb, size_t __max, __locale_t __loc) {
167 return ::mbtowc_l(__pwc, __pmb, __max, __loc);
170 inline _LIBCPP_HIDE_FROM_ABI size_t __mbrlen(const char* __s, size_t __n, mbstate_t* __ps, __locale_t __loc) {
171 return ::mbrlen_l(__s, __n, __ps, __loc);
174 inline _LIBCPP_HIDE_FROM_ABI size_t
175 __mbsrtowcs(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps, __locale_t __loc) {
176 return ::mbsrtowcs_l(__dest, __src, __len, __ps, __loc);
178 #endif
180 _LIBCPP_DIAGNOSTIC_PUSH
181 _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wgcc-compat")
182 _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") // GCC doesn't support [[gnu::format]] on variadic templates
183 #ifdef _LIBCPP_COMPILER_CLANG_BASED
184 # define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(...) _LIBCPP_ATTRIBUTE_FORMAT(__VA_ARGS__)
185 #else
186 # define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(...) /* nothing */
187 #endif
189 template <class... _Args>
190 _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 4, 5) int __snprintf(
191 char* __s, size_t __n, __locale_t __loc, const char* __format, _Args&&... __args) {
192 return ::snprintf_l(__s, __n, __loc, __format, std::forward<_Args>(__args)...);
195 template <class... _Args>
196 _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 3, 4) int __asprintf(
197 char** __s, __locale_t __loc, const char* __format, _Args&&... __args) {
198 return ::asprintf_l(__s, __loc, __format, std::forward<_Args>(__args)...);
201 template <class... _Args>
202 _LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__scanf__, 3, 4) int __sscanf(
203 const char* __s, __locale_t __loc, const char* __format, _Args&&... __args) {
204 return ::sscanf_l(__s, __loc, __format, std::forward<_Args>(__args)...);
206 _LIBCPP_DIAGNOSTIC_POP
207 #undef _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT
209 } // namespace __locale
210 _LIBCPP_END_NAMESPACE_STD
212 #endif // _LIBCPP___LOCALE_DIR_SUPPORT_BSD_LIKE_H