projects
/
musl
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
preserve errno across free
[musl]
/
src
/
multibyte
/
wcsnrtombs.c
1
#include <wchar.h>
2
#include <limits.h>
3
#include <string.h>
4
5
size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, size_t n, mbstate_t *restrict st)
6
{
7
const wchar_t *ws = *wcs;
8
size_t cnt = 0;
9
if (!dst) n=0;
10
while (ws && wn) {
11
char tmp[MB_LEN_MAX];
12
size_t l = wcrtomb(n<MB_LEN_MAX ? tmp : dst, *ws, 0);
13
if (l==-1) {
14
cnt = -1;
15
break;
16
}
17
if (dst) {
18
if (n<MB_LEN_MAX) {
19
if (l>n) break;
20
memcpy(dst, tmp, l);
21
}
22
dst += l;
23
n -= l;
24
}
25
if (!*ws) {
26
ws = 0;
27
break;
28
}
29
ws++;
30
wn--;
31
cnt += l;
32
}
33
if (dst) *wcs = ws;
34
return cnt;
35
}