X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fuchar%2F_PDCLIB_mbsrtoc32s.c;fp=functions%2Fuchar%2F_PDCLIB_mbsrtoc32s.c;h=0571e2c15c3f7715829f0adc08727d9c31b3bb22;hp=0000000000000000000000000000000000000000;hb=3fc6b339325dcf3f49c90a0fa76a45e438aff79c;hpb=0dded1df614dd9e85090198afd5974f22e5c9f99 diff --git a/functions/uchar/_PDCLIB_mbsrtoc32s.c b/functions/uchar/_PDCLIB_mbsrtoc32s.c new file mode 100644 index 0000000..0571e2c --- /dev/null +++ b/functions/uchar/_PDCLIB_mbsrtoc32s.c @@ -0,0 +1,59 @@ +/* _PDCLIB_mbsrtoc32s( + char32_t *restrict dst, + const char **restrict src, + size_t len, + mbstate_t *restrict ps); + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#ifndef REGTEST +#include +#include +#include +#include +#include <_PDCLIB_encoding.h> +#include <_PDCLIB_locale.h> + +size_t _PDCLIB_mbsrtoc32s_l +( + char32_t *restrict dst, + const char **restrict src, + size_t len, + mbstate_t *restrict ps, + locale_t restrict l +) +{ + size_t dstlen = len = dst ? len : SIZE_MAX; + char32_t *restrict *restrict dstp = dst ? &dst : NULL; + + size_t srclen = strlen(*src); + if(l->_Codec->__mbstoc32s(dstp, &dstlen, src, &srclen, ps)) { + return len - dstlen; + } else { + errno = EILSEQ; + return (size_t) -1; + } +} + +size_t _PDCLIB_mbsrtoc32s( + char32_t *restrict dst, + const char **restrict src, + size_t len, + mbstate_t *restrict ps +) +{ + return _PDCLIB_mbsrtoc32s_l(dst, src, len, ps, _PDCLIB_threadlocale()); +} + +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +int main( void ) +{ + return TEST_RESULTS; +} +#endif