111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// -*- C++ -*-
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===--------------------------- wchar.h ----------------------------------===//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__need_wint_t) || defined(__need_mbstate_t)
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma GCC system_header
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include_next <wchar.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif !defined(_LIBCPP_WCHAR_H)
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LIBCPP_WCHAR_H
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    wchar.h synopsis
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertMacros:
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    NULL
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    WCHAR_MAX
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    WCHAR_MIN
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    WEOF
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertTypes:
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    mbstate_t
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    size_t
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    tm
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    wint_t
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint fwprintf(FILE* restrict stream, const wchar_t* restrict format, ...);
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint fwscanf(FILE* restrict stream, const wchar_t* restrict format, ...);
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint swprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, ...);
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint swscanf(const wchar_t* restrict s, const wchar_t* restrict format, ...);
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vfwprintf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vfwscanf(FILE* restrict stream, const wchar_t* restrict format, va_list arg);  // C99
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vswprintf(wchar_t* restrict s, size_t n, const wchar_t* restrict format, va_list arg);
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vswscanf(const wchar_t* restrict s, const wchar_t* restrict format, va_list arg);  // C99
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vwprintf(const wchar_t* restrict format, va_list arg);
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint vwscanf(const wchar_t* restrict format, va_list arg);  // C99
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wprintf(const wchar_t* restrict format, ...);
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wscanf(const wchar_t* restrict format, ...);
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t fgetwc(FILE* stream);
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict stream);
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t fputwc(wchar_t c, FILE* stream);
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint fputws(const wchar_t* restrict s, FILE* restrict stream);
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint fwide(FILE* stream, int mode);
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t getwc(FILE* stream);
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t getwchar();
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t putwc(wchar_t c, FILE* stream);
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t putwchar(wchar_t c);
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t ungetwc(wint_t c, FILE* stream);
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdouble wcstod(const wchar_t* restrict nptr, wchar_t** restrict endptr);
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfloat wcstof(const wchar_t* restrict nptr, wchar_t** restrict endptr);         // C99
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlong double wcstold(const wchar_t* restrict nptr, wchar_t** restrict endptr);  // C99
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlong wcstol(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlong long wcstoll(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunsigned long wcstoul(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertunsigned long long wcstoull(const wchar_t* restrict nptr, wchar_t** restrict endptr, int base);  // C99
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wcscpy(wchar_t* restrict s1, const wchar_t* restrict s2);
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wcsncpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wcscat(wchar_t* restrict s1, const wchar_t* restrict s2);
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wcsncat(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wcscmp(const wchar_t* s1, const wchar_t* s2);
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wcscoll(const wchar_t* s1, const wchar_t* s2);
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t n);
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcsxfrm(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcschr(const wchar_t* s, wchar_t c);
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcschr(      wchar_t* s, wchar_t c);
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcscspn(const wchar_t* s1, const wchar_t* s2);
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcslen(const wchar_t* s);
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcspbrk(      wchar_t* s1, const wchar_t* s2);
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcsrchr(      wchar_t* s, wchar_t c);
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcsspn(const wchar_t* s1, const wchar_t* s2);
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcsstr(      wchar_t* s1, const wchar_t* s2);
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wcstok(wchar_t* restrict s1, const wchar_t* restrict s2, wchar_t** restrict ptr);
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wmemchr(      wchar_t* s, wchar_t c, size_t n);
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wmemcmp(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wmemcpy(wchar_t* restrict s1, const wchar_t* restrict s2, size_t n);
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wmemmove(wchar_t* s1, const wchar_t* s2, size_t n);
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* wmemset(wchar_t* s, wchar_t c, size_t n);
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcsftime(wchar_t* restrict s, size_t maxsize, const wchar_t* restrict format,
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                const tm* restrict timeptr);
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwint_t btowc(int c);
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint wctob(wint_t c);
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint mbsinit(const mbstate_t* ps);
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t mbrlen(const char* restrict s, size_t n, mbstate_t* restrict ps);
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t mbrtowc(wchar_t* restrict pwc, const char* restrict s, size_t n, mbstate_t* restrict ps);
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict ps);
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t mbsrtowcs(wchar_t* restrict dst, const char** restrict src, size_t len,
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                 mbstate_t* restrict ps);
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                 mbstate_t* restrict ps);
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert*/
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <__config>
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#pragma GCC system_header
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include_next <wchar.h>
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Determine whether we have const-correct overloads for wcschr and friends.
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_)
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif defined(__GLIBC_PREREQ)
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  if __GLIBC_PREREQ(2, 10)
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#    define _LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS 1
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  endif
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__cplusplus) && !defined(_LIBCPP_WCHAR_H_HAS_CONST_OVERLOADS) && defined(_LIBCPP_PREFERRED_OVERLOAD)
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C++" {
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* __libcpp_wcschr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcschr(__s, __c);}
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcschr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcschr(      wchar_t* __s, wchar_t __c) {return __libcpp_wcschr(__s, __c);}
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* __libcpp_wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcspbrk(__s1, __s2);}
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcspbrk(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcspbrk(      wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcspbrk(__s1, __s2);}
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* __libcpp_wcsrchr(const wchar_t* __s, wchar_t __c) {return (wchar_t*)wcsrchr(__s, __c);}
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcsrchr(const wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcsrchr(      wchar_t* __s, wchar_t __c) {return __libcpp_wcsrchr(__s, __c);}
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* __libcpp_wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return (wchar_t*)wcsstr(__s1, __s2);}
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wcsstr(const wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wcsstr(      wchar_t* __s1, const wchar_t* __s2) {return __libcpp_wcsstr(__s1, __s2);}
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwchar_t* __libcpp_wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return (wchar_t*)wmemchr(__s, __c, __n);}
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst wchar_t* wmemchr(const wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert      wchar_t* wmemchr(      wchar_t* __s, wchar_t __c, size_t __n) {return __libcpp_wmemchr(__s, __c, __n);}
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__cplusplus) && (defined(_LIBCPP_MSVCRT) || defined(__MINGW32__))
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C++" {
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <support/win32/support.h> // pull in *swprintf defines
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}  // extern "C++"
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // __cplusplus && _LIBCPP_MSVCRT
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // _LIBCPP_WCHAR_H
176