1 diff --git a/src/multibyte/wcsnrtombs.c b/src/multibyte/wcsnrtombs.c
2 index 676932b5..95e25e70 100644
3 --- a/src/multibyte/wcsnrtombs.c
4 +++ b/src/multibyte/wcsnrtombs.c
10 size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict wcs, size_t wn, size_t n, mbstate_t *restrict st)
12 - size_t l, cnt=0, n2;
14 const wchar_t *ws = *wcs;
15 - const wchar_t *tmp_ws;
17 - if (!dst) s = buf, n = sizeof buf;
20 - while ( ws && n && ( (n2=wn)>=n || n2>32 ) ) {
23 - l = wcsrtombs(s, &ws, n2, 0);
30 + char tmp[MB_LEN_MAX];
31 + size_t l = wcrtomb(n<MB_LEN_MAX ? tmp : dst, *ws, 0);
41 + memcpy(dst, tmp, l);
46 - wn = ws ? wn - (ws - tmp_ws) : 0;
49 - if (ws) while (n && wn) {
50 - l = wcrtomb(s, *ws, 0);
59 - /* safe - this loop runs fewer than sizeof(buf) times */