From 24bfc0746fd5f55a983ab566381cd959b7549b3d Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 11 Nov 2017 14:26:10 -0500 Subject: added u16_mbstowcs(). --- src/u16_mbstowcs.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/u16_mbstowcs.c (limited to 'src') diff --git a/src/u16_mbstowcs.c b/src/u16_mbstowcs.c new file mode 100644 index 0000000..8b84379 --- /dev/null +++ b/src/u16_mbstowcs.c @@ -0,0 +1,36 @@ +/*******************************************************************/ +/* u16ports: u16 variants of wide character string functions. */ +/* Copyright (C) 2017 Z. Gilboa */ +/* Released under the Standard MIT License; see COPYING.U16PORTS. */ +/*******************************************************************/ + +#include +#include +#include + +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; +} -- cgit v1.2.3