/* wchar.h: C99 header */ /* Copyright 2002 ARM Limited. All rights reserved. */ /* * RCS $Revision: 185525 $ * Checkin $Date: 2014-05-29 12:44:48 +0100 (Thu, 29 May 2014) $ * Revising $Author: agrant $ */ #ifndef __wchar_h #define __wchar_h #define __ARMCLIB_VERSION 5050106 #define _ARMABI __declspec(__nothrow) #ifndef __WCHAR_DECLS #define __WCHAR_DECLS #undef __CLIBNS #ifdef __cplusplus #define __CLIBNS ::std:: namespace std { extern "C" { #else /* ndef __cplusplus */ #define __CLIBNS #endif /* ndef __cplusplus */ #if defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__size_t) /* always defined in C++ and non-strict C for consistency of debug info */ #if __sizeof_ptr == 8 typedef unsigned long size_t; /* see */ #else typedef unsigned int size_t; /* see */ #endif #if !defined(__cplusplus) && defined(__STRICT_ANSI__) #define __size_t 1 #endif #endif #ifndef __cplusplus /* wchar_t is a builtin type for C++ */ #if !defined(__STRICT_ANSI__) || !defined(__wchar_t) /* always defined in non-strict C for consistency of debug info */ #if defined(__WCHAR32) || (defined(__ARM_SIZEOF_WCHAR_T) && __ARM_SIZEOF_WCHAR_T == 4) typedef unsigned int wchar_t; /* see */ #else typedef unsigned short wchar_t; /* see */ #endif #ifdef __STRICT_ANSI__ #define __wchar_t 1 #endif #endif #endif #if defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__wint_t) /* always defined in C++ and non-strict C for consistency of debug info */ typedef int wint_t; /* see also */ #if !defined(__cplusplus) && defined(__STRICT_ANSI__) #define __wint_t 1 #endif #endif /* limits of wchar_t */ /* NB we have to undef and redef because they're defined in both * stdint.h and wchar.h */ #undef WCHAR_MIN #undef WCHAR_MAX #if defined(__WCHAR32) || (defined(__ARM_SIZEOF_WCHAR_T) && __ARM_SIZEOF_WCHAR_T == 4) #define WCHAR_MIN 0 #define WCHAR_MAX 0xffffffffU #else #define WCHAR_MIN 0 #define WCHAR_MAX 65535 #endif #undef NULL #define NULL 0 /* see */ /* ANSI forbids va_list to be defined here */ /* keep in step with and */ #if !defined(__va_list) && (defined(__cplusplus) || !defined(__STRICT_ANSI__) || !defined(__va_list_defined)) /* always defined in C++ and non-strict C for consistency of debug info */ #ifdef __clang__ typedef __builtin_va_list __va_list; #else typedef struct __va_list __va_list; #endif #if !defined(__cplusplus) && defined(__STRICT_ANSI__) #define __va_list_defined 1 #endif #endif #ifndef __ARM_WCHAR_NO_IO #undef WEOF #define WEOF ((__CLIBNS wint_t)-1) /* ANSI forbids FILE to be defined here */ #if !defined(__STRICT_ANSI__) /* always defined in non-strict C/C++ for consistency of debug info */ typedef struct __FILE FILE; #else struct __FILE; #endif #endif /* __ARM_WCHAR_NO_IO */ /* * If the compiler supports signalling nans as per N965 then it * will define __SUPPORT_SNAN__, in which case a user may define * _WANT_SNAN in order to obtain compliant versions of the * fwprintf, fwscanf, and wcstod families of functions. */ #if defined(__SUPPORT_SNAN__) && defined(_WANT_SNAN) #pragma import(__use_snan) #endif /* * mbstate_t must be able to contain all the data from an * incomplete MB character, plus shift states. CJK-specific * encodings seem to tend to have at most three bytes per * character, and a single-figure number of shift states, so 32 * bits is sufficient for any of these. UTF-8 encoding a full * 32-bit value is the hardest thing to deal with, and in that * situation the worst case is having to store 25 bits of * character (1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) plus * a few bits saying what sort of state is being stored. This is * still easy enough to fit into 32 bits, so I think a single * 32-bit integer is enough in here. */ typedef struct __mbstate_t { unsigned int __state, __state2; } mbstate_t; /* * `struct tm' must be declared in this header as an incomplete * type. */ struct tm; extern _ARMABI size_t wcsftime(wchar_t * __restrict /*s*/, size_t /*maxsize*/, const wchar_t * __restrict /*format*/, const struct tm * __restrict /*timeptr*/) __attribute__((__nonnull__(1,3,4))); #ifndef __ARM_WCHAR_NO_IO /* * Formatted wide-character I/O functions */ #pragma __printf_args int swprintf(wchar_t * __restrict /*s*/, size_t /*n*/, const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(3))); #pragma __printf_args int vswprintf(wchar_t * __restrict /*s*/, size_t /*n*/, const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(3))); #pragma __scanf_args int swscanf(const wchar_t * __restrict /*s*/, const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2))); #pragma __scanf_args int vswscanf(const wchar_t * __restrict /*s*/, const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2))); #pragma __printf_args int fwprintf(struct __FILE * __restrict /*stream*/, const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2))); #pragma __printf_args int vfwprintf(struct __FILE * __restrict /*stream*/, const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2))); #pragma __scanf_args int fwscanf(struct __FILE * __restrict /*stream*/, const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1,2))); #pragma __scanf_args int vfwscanf(struct __FILE * __restrict /*stream*/, const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1,2))); #pragma __printf_args int wprintf(const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1))); #pragma __printf_args int vwprintf(const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1))); #pragma __scanf_args int wscanf(const wchar_t * __restrict /*format*/, ...) __attribute__((__nonnull__(1))); #pragma __scanf_args int vwscanf(const wchar_t * __restrict /*format*/, __va_list /*arg*/) __attribute__((__nonnull__(1))); /* * Unformatted wide-character I/O functions */ wint_t fgetwc(struct __FILE * /*stream*/) __attribute__((__nonnull__(1))); wchar_t *fgetws(wchar_t * __restrict /*s*/, int /*n*/, struct __FILE * __restrict /*stream*/) __attribute__((__nonnull__(1,3))); wint_t fputwc(wchar_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2))); int fputws(const wchar_t * __restrict /*s*/, struct __FILE * __restrict /*stream*/) __attribute__((__nonnull__(1,2))); int fwide(struct __FILE * /*stream*/, int /*mode*/) __attribute__((__nonnull__(1))); wint_t getwc(struct __FILE * /*stream*/) __attribute__((__nonnull__(1))); wint_t getwchar(void); wint_t putwc(wchar_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2))); wint_t putwchar(wchar_t /*c*/); wint_t ungetwc(wint_t /*c*/, struct __FILE * /*stream*/) __attribute__((__nonnull__(2))); #endif /* __ARM_WCHAR_NO_IO */ wint_t btowc(int /*c*/); wint_t wctob(int /*c*/); int mbsinit(const mbstate_t * /*ps*/); size_t mbrlen(const char * __restrict /*s*/, size_t /*n*/, mbstate_t * __restrict /*ps*/); size_t mbrtowc(wchar_t * __restrict /*pwc*/, const char * __restrict /*s*/, size_t /*n*/, mbstate_t * __restrict /*ps*/); size_t wcrtomb(char * __restrict /*s*/, wchar_t /*wc*/, mbstate_t * __restrict /*ps*/); size_t mbsrtowcs(wchar_t * __restrict /*dst*/, const char ** __restrict /*src*/, size_t /*len*/, mbstate_t * __restrict /*ps*/) __attribute__((__nonnull__(2))); size_t wcsrtombs(char * __restrict /*dst*/, const wchar_t ** __restrict /*src*/, size_t /*len*/, mbstate_t * __restrict /*ps*/) __attribute__((__nonnull__(2))); /* * Wide-character string-to-number conversions. Parallel to strto*. */ double wcstod(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1))); float wcstof(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1))); long double wcstold(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/) __attribute__((__nonnull__(1))); long int wcstol(const wchar_t * /*nptr*/, wchar_t **/*endptr*/, int /*base*/) __attribute__((__nonnull__(1))); unsigned long int wcstoul(const wchar_t * /*nptr*/, wchar_t ** /*endptr*/, int /*base*/) __attribute__((__nonnull__(1))); #if !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__) long long int wcstoll(const wchar_t * __restrict /*nptr*/, wchar_t ** __restrict /*endptr*/, int /*base*/) __attribute__((__nonnull__(1))); unsigned long long int wcstoull(const wchar_t * __restrict /*nptr*/, wchar_t ** __restrict /*endptr*/, int /*base*/) __attribute__((__nonnull__(1))); #endif /* * General wide-character string utilities. */ wchar_t *wcscpy(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); wchar_t *wcsncpy(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); wchar_t *wmemcpy(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); wchar_t *wmemmove(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); wchar_t *wcscat(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); wchar_t *wcsncat(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); int wcscmp(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); int wcsncmp(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); int wcscasecmp(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); int wcsncasecmp(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); int wcscoll(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); size_t wcsxfrm(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(2))); int wmemcmp(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, size_t /*n*/) __attribute__((__nonnull__(1,2))); size_t wcscspn(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); size_t wcsspn(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); wchar_t *wcstok(wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/, wchar_t ** __restrict /*ptr*/) __attribute__((__nonnull__(2,3))); wchar_t *wmemchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/, size_t /*n*/) __attribute__((__nonnull__(1))); size_t wcslen(const wchar_t * __restrict /*s*/) __attribute__((__nonnull__(1))); wchar_t *wmemset(wchar_t * __restrict /*s*/, wchar_t /*c*/, size_t /*n*/) __attribute__((__nonnull__(1))); #ifdef __cplusplus /* * C++'s overloading allows us to provide versions of these * functions which search a const string and return a const * pointer into it, and separate versions which search a * non-const string and return a non-const pointer. */ const wchar_t *wcschr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1))); const wchar_t *wcspbrk(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); const wchar_t *wcsrchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1))); const wchar_t *wcsstr(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); #ifndef __WCHAR_DISABLED extern "C++" wchar_t *wcschr(wchar_t * __restrict __s, wchar_t __c) __attribute__((__nonnull__(1))); extern "C++" inline wchar_t *wcschr(wchar_t * __restrict __s, wchar_t __c) { return const_cast(wcschr(const_cast(__s), __c)); } extern "C++" wchar_t *wcspbrk(wchar_t * __restrict __s1, const wchar_t * __restrict __s2) __attribute__((__nonnull__(1,2))); extern "C++" inline wchar_t *wcspbrk(wchar_t * __restrict __s1, const wchar_t * __restrict __s2) { return const_cast(wcspbrk(const_cast(__s1), __s2)); } extern "C++" wchar_t *wcsrchr(wchar_t * __restrict __s, wchar_t __c) __attribute__((__nonnull__(1))); extern "C++" inline wchar_t *wcsrchr(wchar_t * __restrict __s, wchar_t __c) { return const_cast(wcsrchr(const_cast(__s), __c)); } extern "C++" wchar_t *wcsstr(wchar_t * __restrict __s1, const wchar_t * __restrict __s2) __attribute__((__nonnull__(1,2))); extern "C++" inline wchar_t *wcsstr(wchar_t * __restrict __s1, const wchar_t * __restrict __s2) { return const_cast(wcsstr(const_cast(__s1), __s2)); } #endif #else /* * C's approximation to the above is to have all of these * functions search a const string and return a non-const * pointer. This is the only way to prevent compile errors in * all sensible uses of the functions, but unfortunately * renders them unable to spot a lot of the possible error * cases. */ wchar_t *wcschr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1))); wchar_t *wcspbrk(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); wchar_t *wcsrchr(const wchar_t * __restrict /*s*/, wchar_t /*c*/) __attribute__((__nonnull__(1))); wchar_t *wcsstr(const wchar_t * __restrict /*s1*/, const wchar_t * __restrict /*s2*/) __attribute__((__nonnull__(1,2))); #endif #ifdef __cplusplus } /* extern "C" */ } /* namespace std */ #endif /* __cplusplus */ #endif /* __WCHAR_DECLS */ #if _AEABI_PORTABILITY_LEVEL != 0 && !defined _AEABI_PORTABLE #define _AEABI_PORTABLE #endif #ifdef __cplusplus #ifndef __WCHAR_NO_EXPORTS using ::std::size_t; using ::std::wint_t; using ::std::mbstate_t; using ::std::tm; using ::std::wcsftime; #ifndef __ARM_WCHAR_NO_IO using ::std::swprintf; using ::std::vswprintf; using ::std::swscanf; using ::std::vswscanf; using ::std::fwprintf; using ::std::vfwprintf; using ::std::fwscanf; using ::std::vfwscanf; using ::std::wprintf; using ::std::vwprintf; using ::std::wscanf; using ::std::vwscanf; using ::std::fgetwc; using ::std::fgetws; using ::std::fputwc; using ::std::fputws; using ::std::fwide; using ::std::getwc; using ::std::getwchar; using ::std::putwc; using ::std::putwchar; using ::std::ungetwc; using ::std::btowc; #endif /* __ARM_WCHAR_NO_IO */ using ::std::wctob; using ::std::mbsinit; using ::std::mbrlen; using ::std::mbrtowc; using ::std::wcrtomb; using ::std::mbsrtowcs; using ::std::wcsrtombs; using ::std::wcstod; using ::std::wcstof; using ::std::wcstold; using ::std::wcstol; using ::std::wcstoul; #if !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__) using ::std::wcstoll; using ::std::wcstoull; #endif /* !defined(__STRICT_ANSI__) || (defined(__STDC_VERSION__) && 199901L <= __STDC_VERSION__) */ using ::std::wcscpy; using ::std::wcsncpy; using ::std::wmemcpy; using ::std::wmemmove; using ::std::wcscat; using ::std::wcsncat; using ::std::wcscmp; using ::std::wcsncmp; using ::std::wcscasecmp; using ::std::wcsncasecmp; using ::std::wcscoll; using ::std::wcsxfrm; using ::std::wmemcmp; using ::std::wcschr; using ::std::wcscspn; using ::std::wcspbrk; using ::std::wcsrchr; using ::std::wcsspn; using ::std::wcsstr; using ::std::wcstok; using ::std::wmemchr; using ::std::wcslen; using ::std::wmemset; #if !defined(__STRICT_ANSI__) && !defined(__ARM_WCHAR_NO_IO) using ::std::FILE; #endif #endif /* __WCHAR_NO_EXPORTS */ #endif /* __cplusplus */ #endif /* ndef __wchar_h */ /* end of wchar.h */