wcsrtombs.c - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       wcsrtombs.c (514B)
       ---
            1 #include <string.h>
            2 #include <limits.h>
            3 #include <wchar.h>
            4 
            5 #undef wcsrtombs
            6 
            7 size_t
            8 wcsrtombs(char *restrict dest, const wchar_t **restrict src,
            9           size_t len, mbstate_t *restrict ps)
           10 {
           11         size_t cnt, n;
           12         wchar_t wc;
           13         char buf[MB_LEN_MAX];
           14 
           15         for (n = 0; ; n += cnt) {
           16                 wc = **src;
           17                 cnt = wcrtomb(buf, wc, ps);
           18                 if (cnt == (size_t) -1)
           19                         return -1;
           20 
           21                 if (dest) {
           22                         if (n+cnt > len)
           23                                 return n;
           24                         memcpy(dest+n, buf, cnt);
           25                 }
           26                 *src += 1;
           27 
           28                 if (wc == L'\0')
           29                         break;
           30         }
           31         *src = NULL;
           32 
           33         return n;
           34 }