1*58b9f456SAndroid Build Coastguard Worker // -*- C++ -*-
2*58b9f456SAndroid Build Coastguard Worker //===--------------------------- wchar.h ----------------------------------===//
3*58b9f456SAndroid Build Coastguard Worker //
4*58b9f456SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
5*58b9f456SAndroid Build Coastguard Worker //
6*58b9f456SAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open
7*58b9f456SAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details.
8*58b9f456SAndroid Build Coastguard Worker //
9*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
10*58b9f456SAndroid Build Coastguard Worker
11*58b9f456SAndroid Build Coastguard Worker #if defined(__need_wint_t) || defined(__need_mbstate_t)
12*58b9f456SAndroid Build Coastguard Worker
13*58b9f456SAndroid Build Coastguard Worker #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
14*58b9f456SAndroid Build Coastguard Worker #pragma GCC system_header
15*58b9f456SAndroid Build Coastguard Worker #endif
16*58b9f456SAndroid Build Coastguard Worker
17*58b9f456SAndroid Build Coastguard Worker #include_next <wchar.h>
18*58b9f456SAndroid Build Coastguard Worker
19*58b9f456SAndroid Build Coastguard Worker #elif !defined(_LIBCPP_WCHAR_H)
20*58b9f456SAndroid Build Coastguard Worker #define _LIBCPP_WCHAR_H
21*58b9f456SAndroid Build Coastguard Worker
22*58b9f456SAndroid Build Coastguard Worker /*
23*58b9f456SAndroid Build Coastguard Worker wchar.h synopsis
24*58b9f456SAndroid Build Coastguard Worker
25*58b9f456SAndroid Build Coastguard Worker Macros:
26*58b9f456SAndroid Build Coastguard Worker
27*58b9f456SAndroid Build Coastguard Worker NULL
28*58b9f456SAndroid Build Coastguard Worker WCHAR_MAX
29*58b9f456SAndroid Build Coastguard Worker WCHAR_MIN
30*58b9f456SAndroid Build Coastguard Worker WEOF
31*58b9f456SAndroid Build Coastguard Worker
32*58b9f456SAndroid Build Coastguard Worker Types:
33*58b9f456SAndroid Build Coastguard Worker
34*58b9f456SAndroid Build Coastguard Worker mbstate_t
35*58b9f456SAndroid Build Coastguard Worker size_t
36*58b9f456SAndroid Build Coastguard Worker tm
37*58b9f456SAndroid Build Coastguard Worker wint_t
38*58b9f456SAndroid Build Coastguard Worker
39*58b9f456SAndroid Build Coastguard Worker int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...);
40*58b9f456SAndroid Build Coastguard Worker int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...);
41*58b9f456SAndroid Build Coastguard Worker int swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, ...);
42*58b9f456SAndroid Build Coastguard Worker int swscanf(const wchar_t* restrict s, const wchar_t* restrict format, ...);
43*58b9f456SAndroid Build Coastguard Worker int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);
44*58b9f456SAndroid Build Coastguard Worker int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list arg); // C99
45*58b9f456SAndroid Build Coastguard Worker int vswprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, va_list arg);
46*58b9f456SAndroid Build Coastguard Worker int vswscanf(const wchar_t* restrict s, const wchar_t* restrict format, va_list arg); // C99
47*58b9f456SAndroid Build Coastguard Worker int vwprintf(const wchar_t* restrict format, va_list arg);
48*58b9f456SAndroid Build Coastguard Worker int vwscanf(const wchar_t* restrict format, va_list arg); // C99
49*58b9f456SAndroid Build Coastguard Worker int wprintf(const wchar_t* restrict format, ...);
50*58b9f456SAndroid Build Coastguard Worker int wscanf(const wchar_t* restrict format, ...);
51*58b9f456SAndroid Build Coastguard Worker wint_t fgetwc(FILE* stream);
52*58b9f456SAndroid Build Coastguard Worker wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);
53*58b9f456SAndroid Build Coastguard Worker wint_t fputwc(wchar_t c, FILE* stream);
54*58b9f456SAndroid Build Coastguard Worker int fputws(const wchar_t* restrict s, FILE* restrict stream);
55*58b9f456SAndroid Build Coastguard Worker int fwide(FILE* stream, int mode);
56*58b9f456SAndroid Build Coastguard Worker wint_t getwc(FILE* stream);
57*58b9f456SAndroid Build Coastguard Worker wint_t getwchar();
58*58b9f456SAndroid Build Coastguard Worker wint_t putwc(wchar_t c, FILE* stream);
59*58b9f456SAndroid Build Coastguard Worker wint_t putwchar(wchar_t c);
60*58b9f456SAndroid Build Coastguard Worker wint_t ungetwc(wint_t c, FILE* stream);
61*58b9f456SAndroid Build Coastguard Worker double wcstod(const wchar_t* restrict nptr, wchar_t** restrict endptr);
62*58b9f456SAndroid Build Coastguard Worker float wcstof(const wchar_t* restrict nptr, wchar_t** restrict endptr); // C99
63*58b9f456SAndroid Build Coastguard Worker long double wcstold(const wchar_t* restrict nptr, wchar_t** restrict endptr); // C99
64*58b9f456SAndroid Build Coastguard Worker long wcstol(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
65*58b9f456SAndroid Build Coastguard Worker long long wcstoll(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base); // C99
66*58b9f456SAndroid Build Coastguard Worker unsigned long wcstoul(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
67*58b9f456SAndroid Build Coastguard Worker unsigned long long wcstoull(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base); // C99
68*58b9f456SAndroid Build Coastguard Worker wchar_t* wcscpy(wchar_t* restrict s1, const wchar_t* restrict s2);
69*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsncpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
70*58b9f456SAndroid Build Coastguard Worker wchar_t* wcscat(wchar_t* restrict s1, const wchar_t* restrict s2);
71*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsncat(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
72*58b9f456SAndroid Build Coastguard Worker int wcscmp(const wchar_t* s1, const wchar_t* s2);
73*58b9f456SAndroid Build Coastguard Worker int wcscoll(const wchar_t* s1, const wchar_t* s2);
74*58b9f456SAndroid Build Coastguard Worker int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
75*58b9f456SAndroid Build Coastguard Worker size_t wcsxfrm(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
76*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcschr(const wchar_t* s, wchar_t c);
77*58b9f456SAndroid Build Coastguard Worker wchar_t* wcschr( wchar_t* s, wchar_t c);
78*58b9f456SAndroid Build Coastguard Worker size_t wcscspn(const wchar_t* s1, const wchar_t* s2);
79*58b9f456SAndroid Build Coastguard Worker size_t wcslen(const wchar_t* s);
80*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
81*58b9f456SAndroid Build Coastguard Worker wchar_t* wcspbrk( wchar_t* s1, const wchar_t* s2);
82*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
83*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsrchr( wchar_t* s, wchar_t c);
84*58b9f456SAndroid Build Coastguard Worker size_t wcsspn(const wchar_t* s1, const wchar_t* s2);
85*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
86*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsstr( wchar_t* s1, const wchar_t* s2);
87*58b9f456SAndroid Build Coastguard Worker wchar_t* wcstok(wchar_t* restrict s1, const wchar_t* restrict s2, wchar_t** restrict ptr);
88*58b9f456SAndroid Build Coastguard Worker const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
89*58b9f456SAndroid Build Coastguard Worker wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
90*58b9f456SAndroid Build Coastguard Worker int wmemcmp(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
91*58b9f456SAndroid Build Coastguard Worker wchar_t* wmemcpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
92*58b9f456SAndroid Build Coastguard Worker wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
93*58b9f456SAndroid Build Coastguard Worker wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
94*58b9f456SAndroid Build Coastguard Worker size_t wcsftime(wchar_t* restrict s, size_t maxsize, const wchar_t* restrict format,
95*58b9f456SAndroid Build Coastguard Worker const tm* restrict timeptr);
96*58b9f456SAndroid Build Coastguard Worker wint_t btowc(int c);
97*58b9f456SAndroid Build Coastguard Worker int wctob(wint_t c);
98*58b9f456SAndroid Build Coastguard Worker int mbsinit(const mbstate_t* ps);
99*58b9f456SAndroid Build Coastguard Worker size_t mbrlen(const char* restrict s, size_t n, mbstate_t* restrict ps);
100*58b9f456SAndroid Build Coastguard Worker size_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
101*58b9f456SAndroid Build Coastguard Worker size_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict ps);
102*58b9f456SAndroid Build Coastguard Worker size_t mbsrtowcs(wchar_t* restrict dst, const char** restrict src, size_t len,
103*58b9f456SAndroid Build Coastguard Worker mbstate_t* restrict ps);
104*58b9f456SAndroid Build Coastguard Worker size_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
105*58b9f456SAndroid Build Coastguard Worker mbstate_t* restrict ps);
106*58b9f456SAndroid Build Coastguard Worker
107*58b9f456SAndroid Build Coastguard Worker */
108*58b9f456SAndroid Build Coastguard Worker
109*58b9f456SAndroid Build Coastguard Worker #include <__config>
110*58b9f456SAndroid Build Coastguard Worker
111*58b9f456SAndroid Build Coastguard Worker #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
112*58b9f456SAndroid Build Coastguard Worker #pragma GCC system_header
113*58b9f456SAndroid Build Coastguard Worker #endif
114*58b9f456SAndroid Build Coastguard Worker
115*58b9f456SAndroid Build Coastguard Worker #ifdef __cplusplus
116*58b9f456SAndroid Build Coastguard Worker #define __CORRECT_ISO_CPP_WCHAR_H_PROTO
117*58b9f456SAndroid Build Coastguard Worker #endif
118*58b9f456SAndroid Build Coastguard Worker
119*58b9f456SAndroid Build Coastguard Worker #include_next <wchar.h>
120*58b9f456SAndroid Build Coastguard Worker
121*58b9f456SAndroid Build Coastguard Worker // Determine whether we have const-correct overloads for wcschr and friends.
122*58b9f456SAndroid Build Coastguard Worker #if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
123*58b9f456SAndroid Build Coastguard Worker # define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
124*58b9f456SAndroid Build Coastguard Worker #elif defined(__GLIBC_PREREQ)
125*58b9f456SAndroid Build Coastguard Worker # if __GLIBC_PREREQ(2, 10)
126*58b9f456SAndroid Build Coastguard Worker # define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
127*58b9f456SAndroid Build Coastguard Worker # endif
128*58b9f456SAndroid Build Coastguard Worker #elif defined(_LIBCPP_MSVCRT)
129*58b9f456SAndroid Build Coastguard Worker # if defined(_CRT_CONST_CORRECT_OVERLOADS)
130*58b9f456SAndroid Build Coastguard Worker # define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
131*58b9f456SAndroid Build Coastguard Worker # endif
132*58b9f456SAndroid Build Coastguard Worker #endif
133*58b9f456SAndroid Build Coastguard Worker
134*58b9f456SAndroid Build Coastguard Worker #if defined(__cplusplus) && !defined(_LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
135*58b9f456SAndroid Build Coastguard Worker extern "C++" {
136*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcschr(const wchar_t * __s,wchar_t __c)137*58b9f456SAndroid Build Coastguard Worker wchar_t* __libcpp_wcschr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcschr(__s, __c);}
138*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcschr(const wchar_t * __s,wchar_t __c)139*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcschr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
140*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcschr(wchar_t * __s,wchar_t __c)141*58b9f456SAndroid Build Coastguard Worker wchar_t* wcschr( wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
142*58b9f456SAndroid Build Coastguard Worker
143*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcspbrk(const wchar_t * __s1,const wchar_t * __s2)144*58b9f456SAndroid Build Coastguard Worker wchar_t* __libcpp_wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcspbrk(__s1, __s2);}
145*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcspbrk(const wchar_t * __s1,const wchar_t * __s2)146*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
147*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcspbrk(wchar_t * __s1,const wchar_t * __s2)148*58b9f456SAndroid Build Coastguard Worker wchar_t* wcspbrk( wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
149*58b9f456SAndroid Build Coastguard Worker
150*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcsrchr(const wchar_t * __s,wchar_t __c)151*58b9f456SAndroid Build Coastguard Worker wchar_t* __libcpp_wcsrchr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcsrchr(__s, __c);}
152*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsrchr(const wchar_t * __s,wchar_t __c)153*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcsrchr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
154*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsrchr(wchar_t * __s,wchar_t __c)155*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsrchr( wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
156*58b9f456SAndroid Build Coastguard Worker
157*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcsstr(const wchar_t * __s1,const wchar_t * __s2)158*58b9f456SAndroid Build Coastguard Worker wchar_t* __libcpp_wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcsstr(__s1, __s2);}
159*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsstr(const wchar_t * __s1,const wchar_t * __s2)160*58b9f456SAndroid Build Coastguard Worker const wchar_t* wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
161*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsstr(wchar_t * __s1,const wchar_t * __s2)162*58b9f456SAndroid Build Coastguard Worker wchar_t* wcsstr( wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
163*58b9f456SAndroid Build Coastguard Worker
164*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wmemchr(const wchar_t * __s,wchar_t __c,size_t __n)165*58b9f456SAndroid Build Coastguard Worker wchar_t* __libcpp_wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return (wchar_t*)wmemchr(__s, __c, __n);}
166*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wmemchr(const wchar_t * __s,wchar_t __c,size_t __n)167*58b9f456SAndroid Build Coastguard Worker const wchar_t* wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
168*58b9f456SAndroid Build Coastguard Worker inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wmemchr(wchar_t * __s,wchar_t __c,size_t __n)169*58b9f456SAndroid Build Coastguard Worker wchar_t* wmemchr( wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
170*58b9f456SAndroid Build Coastguard Worker }
171*58b9f456SAndroid Build Coastguard Worker #endif
172*58b9f456SAndroid Build Coastguard Worker
173*58b9f456SAndroid Build Coastguard Worker #if defined(__cplusplus) && defined(_LIBCPP_MSVCRT_LIKE)
174*58b9f456SAndroid Build Coastguard Worker extern "C" {
175*58b9f456SAndroid Build Coastguard Worker size_t mbsnrtowcs(wchar_t *__restrict dst, const char **__restrict src,
176*58b9f456SAndroid Build Coastguard Worker size_t nmc, size_t len, mbstate_t *__restrict ps);
177*58b9f456SAndroid Build Coastguard Worker size_t wcsnrtombs(char *__restrict dst, const wchar_t **__restrict src,
178*58b9f456SAndroid Build Coastguard Worker size_t nwc, size_t len, mbstate_t *__restrict ps);
179*58b9f456SAndroid Build Coastguard Worker } // extern "C++"
180*58b9f456SAndroid Build Coastguard Worker #endif // __cplusplus && _LIBCPP_MSVCRT
181*58b9f456SAndroid Build Coastguard Worker
182*58b9f456SAndroid Build Coastguard Worker #endif // _LIBCPP_WCHAR_H
183