X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fuchar%2F_PDCLIB_c32srtombs.c;fp=functions%2Fuchar%2F_PDCLIB_c32srtombs.c;h=da8025913da287ff164135476c090a3d22a2880e;hp=0000000000000000000000000000000000000000;hb=3fc6b339325dcf3f49c90a0fa76a45e438aff79c;hpb=0dded1df614dd9e85090198afd5974f22e5c9f99 diff --git a/functions/uchar/_PDCLIB_c32srtombs.c b/functions/uchar/_PDCLIB_c32srtombs.c new file mode 100644 index 0000000..da80259 --- /dev/null +++ b/functions/uchar/_PDCLIB_c32srtombs.c @@ -0,0 +1,60 @@ +/* _PDCLIB_c32srtombs( + char *_PDCLIB_restrict dst, + const char32_t **_PDCLIB_restrict src, + size_t len, + mbstate_t *_PDCLIB_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 <_PDCLIB_encoding.h> +#include <_PDCLIB_locale.h> + +size_t _PDCLIB_c32srtombs_l( + char *restrict dst, + const char32_t **restrict src, + size_t len, + mbstate_t *restrict ps, + _PDCLIB_locale_t restrict l) +{ + char *restrict *restrict dstp = dst ? &dst : NULL; + len = dst ? len : SIZE_MAX; + + size_t srclen = _PDCLIB_c32slen(*src); + size_t dstlen = len; + + if(l->_Codec->__c32stombs(dstp, &dstlen, src, &srclen, ps)) { + // Successful conversion + return len - dstlen; + } else { + // Failed conversion + errno = EILSEQ; + return (size_t) -1; + } +} + +size_t _PDCLIB_c32srtombs( + char *restrict dst, + const char32_t **restrict src, + size_t len, + mbstate_t *restrict ps +) +{ + return _PDCLIB_c32srtombs_l(dst, src, len, ps, _PDCLIB_threadlocale()); +} + +#endif + +#ifdef TEST +#include <_PDCLIB_test.h> + +int main( void ) +{ + return TEST_RESULTS; +} +#endif \ No newline at end of file