/** * @defgroup wchar Wchar * @ingroup libc */ #ifndef _WCHAR_H #define _WCHAR_H #ifdef __cplusplus extern "C" { #endif #include #define __NEED_FILE #define __NEED___isoc_va_list #define __NEED_size_t #define __NEED_wchar_t #define __NEED_wint_t #define __NEED_mbstate_t #if __STDC_VERSION__ < 201112L #define __NEED_struct__IO_FILE #endif #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define __NEED_locale_t #define __NEED_va_list #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define __NEED_wctype_t #endif #include #if L'\0'-1 > 0 #define WCHAR_MAX (0xffffffffu+L'\0') #define WCHAR_MIN (0+L'\0') #else #define WCHAR_MAX (0x7fffffff+L'\0') #define WCHAR_MIN (-1-0x7fffffff+L'\0') #endif #ifdef __XLT_OS__ #undef NULL #endif #ifdef __cplusplus #define NULL 0L #else #define NULL ((void*)0) #endif #undef WEOF #define WEOF 0xffffffffU /** * @ingroup wchar * * @par Description: * The wcscpy() function is the wide-character equivalent of the strcpy() function. * It copies the wide-character string pointed to by src, * including the terminating null wide character (L'\0'), to the array pointed to by dest. * * @attention * * * @retval #wchar_t* wcscpy() returns dest. * * @par Dependency: * * @see strcpy | wmemcpy * @since Huawei LiteOS V100R001C00 */ wchar_t *wcscpy (wchar_t *__restrict, const wchar_t *__restrict); /** * @ingroup wchar * * @par Description: * The wcsncpy() function copies at most n wide characters from the wide-character * string pointed to by src, including the terminating null wide character (L"\0"), * to the array pointed to by dest. Exactly n wide characters are written at dst. * If the length wcslen(src) is smaller than n, the remaining wide characters in the * array pointed to by dst are filled with null wide characters. If the length * wcslen(src) is greater than or equal to n, the string pointed to by dest will * not be terminated by a null wide character. The strings may not overlap.The programmer * must ensure that there is room for at least n wide characters at dst. * * @attention * * * @retval #wchar_t* wcsncpy() returns the address of dst. * * @par Dependency: * * @see strncpy * @since Huawei LiteOS V100R001C00 */ wchar_t *wcsncpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); wchar_t *wcscat (wchar_t *__restrict, const wchar_t *__restrict); wchar_t *wcsncat (wchar_t *__restrict, const wchar_t *__restrict, size_t); /** * @ingroup wchar * * @par Description: * The wcscmp() function compares the wide-character string pointed to by s1 * and the wide-character string pointed to by s2. * * @attention * * * @retval #int The wcscmp() function returns zero if the wide-character strings * at s1 and s2 are equal. It returns an integer greater than zero if at the first * differing position i, the corresponding wide-character s1[i] is greater than s2[i]. * It returns an integer less than zero if at the first differing position i, * the corresponding wide-character s1[i] is less than s2[i]. * * @par Dependency: * * @see strcmp | wmemcmp * @since Huawei LiteOS V100R001C00 */ int wcscmp (const wchar_t *, const wchar_t *); /** * @ingroup wchar * * @par Description: * The wcsncmp() function compares the wide-character string pointed to by s1 * and the wide-character string pointed to by s2, but at most n wide characters * from each string. In each string, the comparison extends only up to the first * occurrence of a null wide character (L"\0"), if any. * * @attention * * * @retval #int The wcsncmp() function returns zero if the wide-character * strings at s1 and s2, truncated to at most length n, * are equal. It returns an integer greater than zero if at the first differing * position i (i < n), the corresponding wide-character * s1[i] is greater than s2[i]. It returns an integer less than zero if at the * first differing position i (i < n), the corresponding * wide-character s1[i] is less than s2[i]. * * @par Dependency: * * @see strncmp * @since Huawei LiteOS V100R001C00 */ int wcsncmp (const wchar_t *, const wchar_t *, size_t); /** * @ingroup wchar * * @par Description: * The wcscoll() function shall compare the wide-character string pointed to by * s1 to the wide-character string pointed to by s2. * * @attention * * * @retval #int Upon successful completion, wcscoll() shall return an integer * greater than, equal to, or less than 0, according to whether the wide-character * string pointed to by s1 is greater than, equal to, or less than the wide-character * string pointed to by s2. * * @par Dependency: * * @see wcscmp | wcsxfrm * @since Huawei LiteOS V100R001C00 */ int wcscoll(const wchar_t *, const wchar_t *); /** * @ingroup wchar * * @par Description: * The wcsxfrm() function transforms wide-character string. * * @attention * * * @retval #size_t The wcsxfrm() shall return the length of the transformed * wide-character string (not including the terminating null wide-character code). * * @par Dependency: * * @see wcscmp | wcscoll * @since Huawei LiteOS V100R001C00 */ size_t wcsxfrm (wchar_t *__restrict, const wchar_t *__restrict, size_t); /** * @ingroup wchar * * @par Description: * The wcschr() function searches the first occurrence of c in the * wide-character string pointed to by s. * * @attention * * * @retval #wchar_t* The wcschr() function returns a pointer to the first occurrence of c in * the wide-character string pointed to by s, or NULL if wc does not occur in the string. * * @par Dependency: * * @see strchr | wmemchr * @since Huawei LiteOS V100R001C00 */ wchar_t *wcschr (const wchar_t *, wchar_t); wchar_t *wcsrchr (const wchar_t *, wchar_t); size_t wcscspn (const wchar_t *, const wchar_t *); size_t wcsspn (const wchar_t *, const wchar_t *); wchar_t *wcspbrk (const wchar_t *, const wchar_t *); wchar_t *wcstok (wchar_t *__restrict, const wchar_t *__restrict, wchar_t **__restrict); /** * @ingroup wchar * * @par Description: * The wcslen() function shall compute the number of wide-character * codes in the wide-character string to which s points, * not including the terminating null wide-character code. * * @attention * * * @retval #size_t The wcslen() function shall return the length of s. * * @par Dependency: * * @see strlen * @since Huawei LiteOS V100R001C00 */ size_t wcslen (const wchar_t *); /** * @ingroup wchar * * @par Description: * The wcsstr() function is the wide-character equivalent of the strstr() function. It searches for the first occurrence of * the wide-character string __needle (without its terminating null wide character (L'\0')) as a substring in * the wide-character string __haystack. * * @attention * * * @retval #wchar_t* The wcsstr() function returns a pointer to the first occurrence of __needle in __haystack. * It returns NULL if needle does not occur as a substring in __haystack. * * @par Dependency: * * @see mbsinit | wcrtomb | wcsnrtombs | wcstombs * @since Huawei LiteOS V100R001C00 */ wchar_t *wcsstr (const wchar_t *__restrict, const wchar_t *__restrict); wchar_t *wcswcs (const wchar_t *, const wchar_t *); /** * @ingroup wchar * * @par Description: * The wmemchr() searches the n wide characters starting at s for the * first occurrence of the wide character c. * * @attention * * * @retval #wchar_t* The wmemchr() function returns a pointer to the first occurrence of c among * the n wide characters starting at s, or NULL if c does not occur among these. * * @par Dependency: * * @see memchr | wcschr * @since Huawei LiteOS V100R001C00 */ wchar_t *wmemchr (const wchar_t *, wchar_t, size_t); /** * @ingroup wchar * * @par Description: * The wmemcmp() function compares the n wide-characters starting at s1 * and the n wide-characters starting at s2. * * @attention * * * @retval #int The wmemcmp() function returns zero if the wide-character arrays * of size n at s1 and s2 are equal. It returns an integer greater than zero if * at the first differing position i (i < n), the corresponding wide-character * s1[i] is greater than s2[i]. It returns an integer less than zero if at the first * differing position i (i < n), the corresponding wide-character s1[i] is less than s2[i]. * * @par Dependency: * * @see memcmp | wcscmp * @since Huawei LiteOS V100R001C00 */ int wmemcmp (const wchar_t *, const wchar_t *, size_t); /** * @ingroup wchar * * @par Description: * The wmemcpy() function copies n wide characters from the array starting at * s to the array starting at d. The programmer must ensure that there is room * for at least n wide characters at d. * * @attention * * * @retval #wchar_t* wmemcpy() returns the address of d. * * @par Dependency: * * @see memcpy | wmemmove * @since Huawei LiteOS V100R001C00 */ wchar_t *wmemcpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); /** * @ingroup wchar * * @par Description: * The wmemmove() function is the wide-character equivalent of the memmove() function. * It copies n wide characters from the array starting at src to the array starting at dest. * * @attention * * * @retval #wchar_t* wmemmove() returns dest. * * @par Dependency: * * @see memmove | wmemcpy * @since Huawei LiteOS V100R001C00 */ wchar_t *wmemmove (wchar_t *, const wchar_t *, size_t); /** * @ingroup wchar * * @par Description: * The wmemset() function fills the array of n wide-characters * starting at s with n copies of the wide character c. * * @attention * * * @retval #wchar_t* wmemset() returns the address of s. * * @par Dependency: * * @see memset * @since Huawei LiteOS V100R001C00 */ wchar_t *wmemset (wchar_t *, wchar_t, size_t); /** * @ingroup wchar * * @par Description: * The btowc() function converts single byte to wide character. * * @attention * * * @retval #wint_t The btowc() function shall return WEOF if c has the value EOF or if c * does not constitute a valid character in the initial shift state. Otherwise, it shall * return the wide-character representation of that character. * * @par Dependency: * * @see wctob * @since Huawei LiteOS V100R001C00 */ wint_t btowc (int); /** * @ingroup wchar * * @par Description: * The wctob() function tests whether the multibyte representation of * the wide character wc, starting in the initial state, consists of a * single byte. If so, it is returned as an unsigned char. * * @attention * * * @retval #int The wctob() function returns the single-byte representation of wc, * if it exists, of EOF otherwise. * * @par Dependency: * * @see btowc | wcrtomb | wctomb * @since Huawei LiteOS V100R001C00 */ int wctob (wint_t); /** * @ingroup wchar * * @par Description: * The mbsinit() function determines conversion object status. * * @attention * * * @retval #int The mbsinit() returns nonzero if *ps is an initial state, or if ps is NULL. * Otherwise, it returns 0. * * @par Dependency: * * @see mbrlen | mbrtowc | wcrtomb | mbsrtowcs | wcsrtombs * @since Huawei LiteOS V100R001C00 */ int mbsinit (const mbstate_t *); /** * @ingroup wchar * * @par Description: * The mbrtowc() function converts a character to a wide-character code. * * @attention * * * @retval #size_t The mbrtowc() function returns the number of bytes parsed * from the multibyte sequence starting at s, if a non-L'\0' wide character * was recognized. It returns 0, if a L'\0' wide character was recognized. * It returns (size_t) -1 and sets errno to EILSEQ, if an invalid multibyte * sequence was encountered. It returns (size_t) -2 if it couldn't parse a * complete multibyte character, meaning that n should be increased. * * @par Errors * * * @par Dependency: * * @see mbsinit | mbsrtowcs * @since Huawei LiteOS V100R001C00 */ size_t mbrtowc (wchar_t *__restrict, const char *__restrict, size_t, mbstate_t *__restrict); /** * @ingroup wchar * * @par Description: * The wcrtomb() function converts a wide-character code to a character. * * @attention * * * @retval #size_t The wcrtomb() function returns the number of bytes that have been or * would have been written to the byte array at s. If wc can not be represented as a multibyte * sequence (according to the current locale), (size_t) -1 is returned, and errno set to EILSEQ. * * @par Dependency: * * @see mbsinit | wcsrtombs * @since Huawei LiteOS V100R001C00 */ size_t wcrtomb (char *__restrict, wchar_t, mbstate_t *__restrict); /** * @ingroup wchar * * @par Description: * If s is not a null pointer, mbrlen() shall determine the number of bytes constituting * the character pointed to by s. It shall be equivalent:\n * mbstate_t internal;\n * mbrtowc(NULL, s, n, ps != NULL ? ps : &internal);\n * If ps is a null pointer, the mbrlen() function shall use its own * internal mbstate_t object, which is initialized at program start-up to the initial * conversion state. Otherwise, the mbstate_t object pointed to by ps shall be used to * completely describe the current conversion state of the associated character sequence. * * @attention * * * @retval #size_t The mbrlen() function returns the number of bytes parsed * from the multibyte sequence starting at s, if a non-null wide character was * recognized. It returns 0, if a null wide character was recognized. It returns (size_t) -1 * and sets errno to EILSEQ, if an invalid multibyte sequence was encountered. * It returns (size_t) -2 if it couldn't parse a complete multibyte character, * meaning that n should be increased. * * @par Dependency: * * @see mbrtowc * @since Huawei LiteOS V100R001C00 */ size_t mbrlen (const char *__restrict, size_t, mbstate_t *__restrict); /** * @ingroup wchar * * @par Description: * The mbsrtowcs() function converts a character string to a wide-character string. * * @attention * * * @retval #size_t The mbsrtowcs() function returns the number of wide characters that * make up the converted part of the wide-character string, not including the terminating null * wide character. If an invalid multibyte sequence was encountered, (size_t)-1 is returned, * and errno set to EILSEQ. * * @par Errors * * * @par Dependency: * * @see mbrtowc | mbsinit | mbsnrtowcs * @since Huawei LiteOS V100R001C00 */ size_t mbsrtowcs (wchar_t *__restrict, const char **__restrict, size_t, mbstate_t *__restrict); /** * @ingroup wchar * * @par Description: * The wcsrtombs() function convert a wide-character string to a multibyte string. * * @attention * * * @retval #size_t The wcsrtombs() function returns the number of bytes that make up * the converted part of multibyte sequence, not including the terminating null byte. * If a wide character was encountered which could not be converted, (size_t) -1 * is returned, and errno set to EILSEQ. * * @par Dependency: * * @see mbsinit | wcrtomb | wcsnrtombs | wcstombs * @since Huawei LiteOS V100R001C00 */ size_t wcsrtombs (char *__restrict, const wchar_t **__restrict, size_t, mbstate_t *__restrict); float wcstof (const wchar_t *__restrict, wchar_t **__restrict); double wcstod (const wchar_t *__restrict, wchar_t **__restrict); long double wcstold (const wchar_t *__restrict, wchar_t **__restrict); long wcstol (const wchar_t *__restrict, wchar_t **__restrict, int); unsigned long wcstoul (const wchar_t *__restrict, wchar_t **__restrict, int); long long wcstoll (const wchar_t *__restrict, wchar_t **__restrict, int); unsigned long long wcstoull (const wchar_t *__restrict, wchar_t **__restrict, int); int fwide (FILE *, int); int wprintf (const wchar_t *__restrict, ...); int fwprintf (FILE *__restrict, const wchar_t *__restrict, ...); /** * @ingroup wchar * * @par Description: * The swprintf() functione prints formatted wide-character output. * * @attention * * * @retval #int The swprintf() function returns the number of wide characters written, * excluding the terminating null wide character. * * @par Dependency: * * @see printf * @since Huawei LiteOS V100R001C00 */ int swprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, ...); int vwprintf (const wchar_t *__restrict, __isoc_va_list); /** * @ingroup wchar * * @par Description: * The vfwprintf() function performs wide-character output to stream. * stream must not be byte oriented. * * @attention * * * @retval #int The vfwprintf() function returns the number of wide characters written, * excluding the terminating null wide character. It returns -1 when an error occurs. * * @par Dependency: * * @see fprintf | fputwc | printf | snprintf * @since Huawei LiteOS V100R001C00 */ int vfwprintf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); /** * @ingroup wchar * * @par Description: * The vswprintf() function performs wide-character output to an array of wide characters. * The programmer must ensure that there is room for at least n wide characters at s. * * @attention * * * @retval #int The vswprintf() function returns the number of wide characters written, * excluding the terminating null wide character. It returns -1 when an error occurs. * * @par Dependency: * * @see fprintf | fputwc | | printf | snprintf * @since Huawei LiteOS V100R001C00 */ int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, __isoc_va_list); int wscanf (const wchar_t *__restrict, ...); int fwscanf (FILE *__restrict, const wchar_t *__restrict, ...); int swscanf (const wchar_t *__restrict, const wchar_t *__restrict, ...); int vwscanf (const wchar_t *__restrict, __isoc_va_list); int vfwscanf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, __isoc_va_list); /** * @ingroup wchar * * @par Description: * The fgetwc() function reads a wide character from stream and returns it. * If the end of stream is reached, it returns WEOF. If a wide-character * conversion error occurs, it sets errno to EILSEQ and returns WEOF. * * @attention * * * @retval #wint_t The fgetwc() function returns the next wide-character from the stream, * or WEOF. In the event of an error, errno is set to indicate the cause. * * @par Errors * * * @par Dependency: * * @see fputwc | ungetwc * @since Huawei LiteOS V100R001C00 */ wint_t fgetwc (FILE *); /** * @ingroup wchar * * @par Description: * The getwc() function identically to fgetwc(). * * @attention * * * @retval #wint_t The getwc() function returns the next wide-character from the * stream, or WEOF. In the event of an error, errno is set to indicate the cause. * * @par Errors * * * @par Dependency: * * @see fputwc | ungetwc * @since Huawei LiteOS V100R001C00 */ wint_t getwc (FILE *); wint_t getwchar (void); /** * @ingroup wchar * * @par Description: * The fputwc() function writes the wide character wc to stream. If a wide-character * conversion error occurs, it sets errno to EILSEQ and returns WEOF. * Otherwise, it returns wc. * * @attention * * * @retval #wint_t The fputwc() function returns wc if no error occurred, or WEOF * to indicate an error. In the event of an error, errno is set to indicate the cause. * * @par Errors * * * @par Dependency: * * @see fgetwc * @since Huawei LiteOS V100R001C00 */ wint_t fputwc (wchar_t, FILE *); /** * @ingroup wchar * * @par Description: * The putwc() function identically to fputwc(). * * @attention * * * @retval #wint_t The putwc() function returns wc if no error occurred, * or WEOF to indicate an error. In the event of an error, errno is set * to indicate the cause. * * @par Errors * * * @par Dependency: * * @see fgetwc * @since Huawei LiteOS V100R001C00 */ wint_t putwc (wchar_t, FILE *); wint_t putwchar (wchar_t); wchar_t *fgetws (wchar_t *__restrict, int, FILE *__restrict); int fputws (const wchar_t *__restrict, FILE *__restrict); /** * @ingroup wchar * * @par Description: * The ungetwc() function is the wide-character equivalent of the ungetc() function. * It pushes back a wide character onto stream and returns it. If wc is WEOF, it returns WEOF. * * @attention * * * @retval #wint_t The ungetwc() function returns wc when successful, or WEOF upon failure. * * @par Dependency: * * @see fgetwc * @since Huawei LiteOS V100R001C00 */ wint_t ungetwc (wint_t, FILE *); struct tm; /** * @ingroup wchar * * @par Description: * The wcsftime() function converts date and time to a wide-character string. * * @attention * * * @retval #size_t If the total number of resulting wide-character codes * including the terminating null wide-character code is no more than maxsize, * wcsftime() shall return the number of wide-character codes placed into the * array pointed to by s, not including the terminating null wide-character code. * Otherwise, zero is returned and the contents of the array are unspecified. * * @par Dependency: * * @see strftime * @since Huawei LiteOS V100R001C00 */ size_t wcsftime (wchar_t *__restrict, size_t, const wchar_t *__restrict, const struct tm *__restrict); #undef iswdigit #if defined(_GNU_SOURCE) wint_t fgetwc_unlocked (FILE *); wint_t getwc_unlocked (FILE *); wint_t getwchar_unlocked (void); wint_t fputwc_unlocked (wchar_t, FILE *); wint_t putwc_unlocked (wchar_t, FILE *); wint_t putwchar_unlocked (wchar_t); wchar_t *fgetws_unlocked (wchar_t *__restrict, int, FILE *__restrict); int fputws_unlocked (const wchar_t *__restrict, FILE *__restrict); #endif #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) size_t wcsftime_l (wchar_t *__restrict, size_t, const wchar_t *__restrict, const struct tm *__restrict, locale_t); #endif #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) FILE *open_wmemstream(wchar_t **, size_t *); /** * @ingroup wchar * * @par Description: * The mbsnrtowcs() function converts a character string to a wide-character string. * * @attention * * * @retval #size_t The mbsnrtowcs() function returns the number of wide characters that * make up the converted part of the wide-character string, not including the terminating null * wide character. If an invalid multibyte sequence was encountered, (size_t)-1 is returned, * and errno set to EILSEQ. * * @par Errors * * * @par Dependency: * * @see mbrtowc | mbsinit | mbsrtowcs * @since Huawei LiteOS V100R001C00 */ size_t mbsnrtowcs(wchar_t *__restrict, const char **__restrict, size_t, size_t, mbstate_t *__restrict); /** * @ingroup wchar * * @par Description: * The wcsnrtombs() function converts a wide-character string to a multibyte string. * * @attention * * * @retval #size_t The wcsnrtombs() function returns the number of bytes that make up * the converted part of multibyte sequence, not including the terminating null byte. * If a wide character was encountered which could not be converted, (size_t) -1 * is returned, and errno set to EILSEQ. * * @par Dependency: * * @see mbsinit | wcsrtombs * @since Huawei LiteOS V100R001C00 */ size_t wcsnrtombs(char *__restrict, const wchar_t **__restrict, size_t, size_t, mbstate_t *__restrict); wchar_t *wcsdup(const wchar_t *); /** * @ingroup wchar * * @par Description: * The wcsnlen() function is the wide-character equivalent of the strnlen() function. It returns the number of wide- * characters in the string pointed to by s, not including the terminating null wide character (L'\0'), but at most * maxlen wide characters (note: this parameter is not a byte count). In doing this, wcsnlen() looks at only the first * maxlen wide characters at s and never beyond s+maxlen. * * @attention * * * @retval #size_t The wcsnlen() function returns wcslen(s), if that is less than maxlen, or maxlen if there is no null wide character * among the first maxlen wide characters pointed to by s. * * @par Dependency: * * @see strnlen | wcslen * @since Huawei LiteOS V100R001C00 */ size_t wcsnlen (const wchar_t *, size_t); wchar_t *wcpcpy (wchar_t *__restrict, const wchar_t *__restrict); wchar_t *wcpncpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); int wcscasecmp(const wchar_t *, const wchar_t *); int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t); int wcsncasecmp(const wchar_t *, const wchar_t *, size_t); int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t); int wcscoll_l(const wchar_t *, const wchar_t *, locale_t); size_t wcsxfrm_l(wchar_t *__restrict, const wchar_t *__restrict, size_t, locale_t); #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) int wcwidth (wchar_t); int wcswidth (const wchar_t *, size_t); int iswalnum(wint_t); int iswalpha(wint_t); int iswblank(wint_t); int iswcntrl(wint_t); int iswdigit(wint_t); int iswgraph(wint_t); int iswlower(wint_t); int iswprint(wint_t); int iswpunct(wint_t); int iswspace(wint_t); int iswupper(wint_t); int iswxdigit(wint_t); int iswctype(wint_t, wctype_t); wint_t towlower(wint_t); wint_t towupper(wint_t); wctype_t wctype(const char *); #ifndef __cplusplus #undef iswdigit #define iswdigit(a) (0 ? iswdigit(a) : ((unsigned)(a)-'0') < 10) #endif #endif #ifdef __cplusplus } #endif #endif