1 --- a/src/multibyte/wcsnrtombs.c
2 +++ b/src/multibyte/wcsnrtombs.c
8 size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, size_t n, mbstate_t *restrict st)
10 - size_t l, cnt=0, n2;
12 const wchar_t *ws = *wcs;
13 - const wchar_t *tmp_ws;
15 - if (!dst) s = buf, n = sizeof buf;
18 - while ( ws && n && ( (n2=wn)>=n || n2>32 ) ) {
21 - l = wcsrtombs(s, &ws, n2, 0);
28 + char tmp[MB_LEN_MAX];
29 + size_t l = wcrtomb(n<MB_LEN_MAX ? tmp : dst, *ws, 0);
39 + memcpy(dst, tmp, l);
44 - wn = ws ? wn - (ws - tmp_ws) : 0;
47 - if (ws) while (n && wn) {
48 - l = wcrtomb(s, *ws, 0);
57 - /* safe - this loop runs fewer than sizeof(buf) times */