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