1 /* 2 * Copyright 2018-2020 Haiku, Inc. All Right Reserved 3 * Distributed under the terms of MIT license. 4 */ 5 #ifndef _UCHAR_H 6 #define _UCHAR_H 7 8 9 #include <stdint.h> 10 #include <wchar.h> 11 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 18 typedef uint_least32_t char32_t; 19 typedef uint_least16_t char16_t; 20 21 22 #define __STD_UTF_32__ 1 23 #define __STD_UTF_16__ 1 24 25 26 // TODO implement mbrtoc16 27 28 29 static __inline size_t 30 c16rtomb(char *dest, char32_t wc, mbstate_t *mbState) 31 { 32 wchar_t tmp = (wchar_t)wc; 33 return wcrtomb(dest, tmp, mbState); 34 } 35 36 37 static __inline size_t 38 mbrtoc32(char32_t *dest, const char *src, size_t srcLength, mbstate_t *mbState) 39 { 40 return mbrtowc((wchar_t*)dest, src, srcLength, mbState); 41 } 42 43 44 static __inline size_t 45 c32rtomb(char *dest, char32_t wc, mbstate_t *mbState) 46 { 47 return wcrtomb(dest, (wchar_t)wc, mbState); 48 } 49 50 51 #ifdef __cplusplus 52 } 53 #endif 54 #endif /* _UCHAR_H */ 55