]> pd.if.org Git - pdclib/blob - functions/uchar/_PDCLIB_c32srtombs.c
Cosmetic comment fixes.
[pdclib] / functions / uchar / _PDCLIB_c32srtombs.c
1 /* _PDCLIB_c32srtombs( char *, const char32_t * *, size_t, mbstate_t * )
2
3    This file is part of the Public Domain C Library (PDCLib).
4    Permission is granted to use, modify, and / or redistribute at will.
5 */
6
7 #ifndef REGTEST
8 #include <uchar.h>
9 #include <errno.h>
10 #include <stdint.h>
11 #include "_PDCLIB_encoding.h"
12 #include "_PDCLIB_locale.h"
13
14 static size_t _PDCLIB_c32srtombs_l(
15     char                *restrict   dst, 
16     const char32_t     **restrict   src, 
17     size_t                          len, 
18     mbstate_t           *restrict   ps,
19     _PDCLIB_locale_t     restrict   l)
20 {
21     char *restrict *restrict dstp = dst ? &dst : NULL;
22     len = dst ? len : SIZE_MAX;
23
24     size_t srclen = _PDCLIB_c32slen(*src);
25     size_t dstlen = len;
26
27     if(l->_Codec->__c32stombs(dstp, &dstlen, src, &srclen, ps)) {
28         // Successful conversion
29         return len - dstlen;
30     } else {
31         // Failed conversion
32         errno = EILSEQ;
33         return (size_t) -1;
34     }
35 }
36
37 size_t _PDCLIB_c32srtombs(
38     char                *restrict   dst, 
39     const char32_t     **restrict   src, 
40     size_t                          len, 
41     mbstate_t           *restrict   ps
42 )
43 {
44     return _PDCLIB_c32srtombs_l(dst, src, len, ps, _PDCLIB_threadlocale());
45 }
46
47 #endif
48
49 #ifdef TEST
50 #include "_PDCLIB_test.h"
51
52 int main( void )
53 {
54     TESTCASE( NO_TESTDRIVER );
55     return TEST_RESULTS;
56 }
57 #endif