diff options
Diffstat (limited to 'lib/libc/stdio/vswprintf.c')
-rw-r--r-- | lib/libc/stdio/vswprintf.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/libc/stdio/vswprintf.c b/lib/libc/stdio/vswprintf.c index a9fdaf3..77e289d 100644 --- a/lib/libc/stdio/vswprintf.c +++ b/lib/libc/stdio/vswprintf.c @@ -43,6 +43,8 @@ int vswprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt, __va_list ap) { + static const mbstate_t initial; + mbstate_t mbs; FILE f; struct __sFILEX ext; char *mbp; @@ -76,7 +78,8 @@ vswprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt, * XXX Undo the conversion from wide characters to multibyte that * fputwc() did in __vfwprintf(). */ - if (mbsrtowcs(s, (const char **)&mbp, n, NULL) == (size_t)-1) { + mbs = initial; + if (mbsrtowcs(s, (const char **)&mbp, n, &mbs) == (size_t)-1) { free(f._bf._base); errno = EILSEQ; return (-1); |