| |
| |
| |
| |
| |
| |
| #include <wchar.h> |
| #include <uchar.h> |
| #include <u16ports/u16ports.h> |
| |
| size_t u16_mbstowcs(uint16_t * dst, const char * src, size_t len) |
| { |
| size_t nbytes; |
| uint16_t * wch; |
| mbstate_t st = {0}; |
| |
| for (wch=dst; len; src+=nbytes) { |
| if ((nbytes = mbrtoc16(wch,src,4,&st)) == (size_t)-1) { |
| return (size_t)(-1); |
| |
| } else if (nbytes == 0) { |
| return wch - dst; |
| |
| } else if (nbytes == (size_t)-3) { |
| nbytes = 0; |
| len--; |
| wch++; |
| |
| } else { |
| len--; |
| wch++; |
| } |
| } |
| |
| return wch - dst; |
| } |