xref: /openbsd-src/gnu/llvm/libcxx/include/wchar.h (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
146035553Spatrick // -*- C++ -*-
2*4bdff4beSrobert //===----------------------------------------------------------------------===//
346035553Spatrick //
446035553Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
546035553Spatrick // See https://llvm.org/LICENSE.txt for license information.
646035553Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
746035553Spatrick //
846035553Spatrick //===----------------------------------------------------------------------===//
946035553Spatrick 
1046035553Spatrick #if defined(__need_wint_t) || defined(__need_mbstate_t)
1146035553Spatrick 
1246035553Spatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1346035553Spatrick #  pragma GCC system_header
1446035553Spatrick #endif
1546035553Spatrick 
1646035553Spatrick #include_next <wchar.h>
1746035553Spatrick 
1846035553Spatrick #elif !defined(_LIBCPP_WCHAR_H)
1946035553Spatrick #define _LIBCPP_WCHAR_H
2046035553Spatrick 
2146035553Spatrick /*
2246035553Spatrick     wchar.h synopsis
2346035553Spatrick 
2446035553Spatrick Macros:
2546035553Spatrick 
2646035553Spatrick     NULL
2746035553Spatrick     WCHAR_MAX
2846035553Spatrick     WCHAR_MIN
2946035553Spatrick     WEOF
3046035553Spatrick 
3146035553Spatrick Types:
3246035553Spatrick 
3346035553Spatrick     mbstate_t
3446035553Spatrick     size_t
3546035553Spatrick     tm
3646035553Spatrick     wint_t
3746035553Spatrick 
3846035553Spatrick int fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...);
3946035553Spatrick int fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...);
4046035553Spatrick int swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, ...);
4146035553Spatrick int swscanf(const wchar_t* restrict s, const wchar_t* restrict format, ...);
4246035553Spatrick int vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);
4346035553Spatrick int vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);  // C99
4446035553Spatrick int vswprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, va_list arg);
4546035553Spatrick int vswscanf(const wchar_t* restrict s, const wchar_t* restrict format, va_list arg);  // C99
4646035553Spatrick int vwprintf(const wchar_t* restrict format, va_list arg);
4746035553Spatrick int vwscanf(const wchar_t* restrict format, va_list arg);  // C99
4846035553Spatrick int wprintf(const wchar_t* restrict format, ...);
4946035553Spatrick int wscanf(const wchar_t* restrict format, ...);
5046035553Spatrick wint_t fgetwc(FILE* stream);
5146035553Spatrick wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);
5246035553Spatrick wint_t fputwc(wchar_t c, FILE* stream);
5346035553Spatrick int fputws(const wchar_t* restrict s, FILE* restrict stream);
5446035553Spatrick int fwide(FILE* stream, int mode);
5546035553Spatrick wint_t getwc(FILE* stream);
5646035553Spatrick wint_t getwchar();
5746035553Spatrick wint_t putwc(wchar_t c, FILE* stream);
5846035553Spatrick wint_t putwchar(wchar_t c);
5946035553Spatrick wint_t ungetwc(wint_t c, FILE* stream);
6046035553Spatrick double wcstod(const wchar_t* restrict nptr, wchar_t** restrict endptr);
6146035553Spatrick float wcstof(const wchar_t* restrict nptr, wchar_t** restrict endptr);         // C99
6246035553Spatrick long double wcstold(const wchar_t* restrict nptr, wchar_t** restrict endptr);  // C99
6346035553Spatrick long wcstol(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
6446035553Spatrick long long wcstoll(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
6546035553Spatrick unsigned long wcstoul(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
6646035553Spatrick unsigned long long wcstoull(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
6746035553Spatrick wchar_t* wcscpy(wchar_t* restrict s1, const wchar_t* restrict s2);
6846035553Spatrick wchar_t* wcsncpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
6946035553Spatrick wchar_t* wcscat(wchar_t* restrict s1, const wchar_t* restrict s2);
7046035553Spatrick wchar_t* wcsncat(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
7146035553Spatrick int wcscmp(const wchar_t* s1, const wchar_t* s2);
7246035553Spatrick int wcscoll(const wchar_t* s1, const wchar_t* s2);
7346035553Spatrick int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
7446035553Spatrick size_t wcsxfrm(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
7546035553Spatrick const wchar_t* wcschr(const wchar_t* s, wchar_t c);
7646035553Spatrick       wchar_t* wcschr(      wchar_t* s, wchar_t c);
7746035553Spatrick size_t wcscspn(const wchar_t* s1, const wchar_t* s2);
7846035553Spatrick size_t wcslen(const wchar_t* s);
7946035553Spatrick const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
8046035553Spatrick       wchar_t* wcspbrk(      wchar_t* s1, const wchar_t* s2);
8146035553Spatrick const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
8246035553Spatrick       wchar_t* wcsrchr(      wchar_t* s, wchar_t c);
8346035553Spatrick size_t wcsspn(const wchar_t* s1, const wchar_t* s2);
8446035553Spatrick const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
8546035553Spatrick       wchar_t* wcsstr(      wchar_t* s1, const wchar_t* s2);
8646035553Spatrick wchar_t* wcstok(wchar_t* restrict s1, const wchar_t* restrict s2, wchar_t** restrict ptr);
8746035553Spatrick const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
8846035553Spatrick       wchar_t* wmemchr(      wchar_t* s, wchar_t c, size_t n);
8946035553Spatrick int wmemcmp(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
9046035553Spatrick wchar_t* wmemcpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
9146035553Spatrick wchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
9246035553Spatrick wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
9346035553Spatrick size_t wcsftime(wchar_t* restrict s, size_t maxsize, const wchar_t* restrict format,
9446035553Spatrick                 const tm* restrict timeptr);
9546035553Spatrick wint_t btowc(int c);
9646035553Spatrick int wctob(wint_t c);
9746035553Spatrick int mbsinit(const mbstate_t* ps);
9846035553Spatrick size_t mbrlen(const char* restrict s, size_t n, mbstate_t* restrict ps);
9946035553Spatrick size_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
10046035553Spatrick size_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict ps);
10146035553Spatrick size_t mbsrtowcs(wchar_t* restrict dst, const char** restrict src, size_t len,
10246035553Spatrick                  mbstate_t* restrict ps);
10346035553Spatrick size_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
10446035553Spatrick                  mbstate_t* restrict ps);
10546035553Spatrick 
10646035553Spatrick */
10746035553Spatrick 
10846035553Spatrick #include <__config>
109037e7968Spatrick #include <stddef.h>
11046035553Spatrick 
111*4bdff4beSrobert #if defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)
112*4bdff4beSrobert #   error "The <wchar.h> header is not supported since libc++ has been configured with LIBCXX_ENABLE_WIDE_CHARACTERS disabled"
113*4bdff4beSrobert #endif
114*4bdff4beSrobert 
11546035553Spatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
11646035553Spatrick #  pragma GCC system_header
11746035553Spatrick #endif
11846035553Spatrick 
11946035553Spatrick #ifdef __cplusplus
12046035553Spatrick #define __CORRECT_ISO_CPP_WCHAR_H_PROTO
12146035553Spatrick #endif
12246035553Spatrick 
123*4bdff4beSrobert #  if __has_include_next(<wchar.h>)
12446035553Spatrick #    include_next <wchar.h>
125*4bdff4beSrobert #  endif
12646035553Spatrick 
12746035553Spatrick // Determine whether we have const-correct overloads for wcschr and friends.
12846035553Spatrick #if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
12946035553Spatrick #  define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
13046035553Spatrick #elif defined(__GLIBC_PREREQ)
13146035553Spatrick #  if __GLIBC_PREREQ(2, 10)
13246035553Spatrick #    define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
13346035553Spatrick #  endif
13446035553Spatrick #elif defined(_LIBCPP_MSVCRT)
13546035553Spatrick #  if defined(_CRT_CONST_CORRECT_OVERLOADS)
13646035553Spatrick #    define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
13746035553Spatrick #  endif
13846035553Spatrick #endif
13946035553Spatrick 
14046035553Spatrick #if defined(__cplusplus) && !defined(_LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
14146035553Spatrick extern "C++" {
14246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcschr(const wchar_t * __s,wchar_t __c)14346035553Spatrick wchar_t* __libcpp_wcschr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcschr(__s, __c);}
14446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcschr(const wchar_t * __s,wchar_t __c)14546035553Spatrick const wchar_t* wcschr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
14646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcschr(wchar_t * __s,wchar_t __c)14746035553Spatrick       wchar_t* wcschr(      wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
14846035553Spatrick 
14946035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcspbrk(const wchar_t * __s1,const wchar_t * __s2)15046035553Spatrick wchar_t* __libcpp_wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcspbrk(__s1, __s2);}
15146035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcspbrk(const wchar_t * __s1,const wchar_t * __s2)15246035553Spatrick const wchar_t* wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
15346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcspbrk(wchar_t * __s1,const wchar_t * __s2)15446035553Spatrick       wchar_t* wcspbrk(      wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
15546035553Spatrick 
15646035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcsrchr(const wchar_t * __s,wchar_t __c)15746035553Spatrick wchar_t* __libcpp_wcsrchr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcsrchr(__s, __c);}
15846035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsrchr(const wchar_t * __s,wchar_t __c)15946035553Spatrick const wchar_t* wcsrchr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
16046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsrchr(wchar_t * __s,wchar_t __c)16146035553Spatrick       wchar_t* wcsrchr(      wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
16246035553Spatrick 
16346035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wcsstr(const wchar_t * __s1,const wchar_t * __s2)16446035553Spatrick wchar_t* __libcpp_wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcsstr(__s1, __s2);}
16546035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsstr(const wchar_t * __s1,const wchar_t * __s2)16646035553Spatrick const wchar_t* wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
16746035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wcsstr(wchar_t * __s1,const wchar_t * __s2)16846035553Spatrick       wchar_t* wcsstr(      wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
16946035553Spatrick 
17046035553Spatrick inline _LIBCPP_INLINE_VISIBILITY
__libcpp_wmemchr(const wchar_t * __s,wchar_t __c,size_t __n)17146035553Spatrick wchar_t* __libcpp_wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return (wchar_t*)wmemchr(__s, __c, __n);}
17246035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wmemchr(const wchar_t * __s,wchar_t __c,size_t __n)17346035553Spatrick const wchar_t* wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
17446035553Spatrick inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
wmemchr(wchar_t * __s,wchar_t __c,size_t __n)17546035553Spatrick       wchar_t* wmemchr(      wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
17646035553Spatrick }
17746035553Spatrick #endif
17846035553Spatrick 
179*4bdff4beSrobert #if defined(__cplusplus) && (defined(_LIBCPP_MSVCRT_LIKE) || defined(__MVS__))
18046035553Spatrick extern "C" {
181*4bdff4beSrobert size_t mbsnrtowcs(wchar_t *__restrict __dst, const char **__restrict __src,
182*4bdff4beSrobert                   size_t __nmc, size_t __len, mbstate_t *__restrict __ps);
183*4bdff4beSrobert size_t wcsnrtombs(char *__restrict __dst, const wchar_t **__restrict __src,
184*4bdff4beSrobert                   size_t __nwc, size_t __len, mbstate_t *__restrict __ps);
185*4bdff4beSrobert }  // extern "C"
186*4bdff4beSrobert #endif  // __cplusplus && (_LIBCPP_MSVCRT || __MVS__)
18746035553Spatrick 
18846035553Spatrick #endif // _LIBCPP_WCHAR_H
189