/*******************************************************************/
/* u16ports: u16 variants of wide character string functions. */
/* Copyright (C) 2017 Z. Gilboa */
/* Released under the Standard MIT License; see COPYING.U16PORTS. */
/*******************************************************************/
#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;
}