|
@@ -5,13 +5,14 @@ size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, s
|
|
size_t l, cnt=0, n2;
|
|
size_t l, cnt=0, n2;
|
|
char *s, buf[256];
|
|
char *s, buf[256];
|
|
const wchar_t *ws = *wcs;
|
|
const wchar_t *ws = *wcs;
|
|
|
|
+ const wchar_t *tmp_ws;
|
|
|
|
|
|
if (!dst) s = buf, n = sizeof buf;
|
|
if (!dst) s = buf, n = sizeof buf;
|
|
else s = dst;
|
|
else s = dst;
|
|
|
|
|
|
while ( ws && n && ( (n2=wn)>=n || n2>32 ) ) {
|
|
while ( ws && n && ( (n2=wn)>=n || n2>32 ) ) {
|
|
if (n2>=n) n2=n;
|
|
if (n2>=n) n2=n;
|
|
- wn -= n2;
|
|
|
|
|
|
+ tmp_ws = ws;
|
|
l = wcsrtombs(s, &ws, n2, 0);
|
|
l = wcsrtombs(s, &ws, n2, 0);
|
|
if (!(l+1)) {
|
|
if (!(l+1)) {
|
|
cnt = l;
|
|
cnt = l;
|
|
@@ -22,6 +23,7 @@ size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, s
|
|
s += l;
|
|
s += l;
|
|
n -= l;
|
|
n -= l;
|
|
}
|
|
}
|
|
|
|
+ wn = ws ? wn - (ws - tmp_ws) : 0;
|
|
cnt += l;
|
|
cnt += l;
|
|
}
|
|
}
|
|
if (ws) while (n && wn) {
|
|
if (ws) while (n && wn) {
|