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