Index: vswprintf.c =================================================================== RCS file: /home/ncvs/src/lib/libc/stdio/vswprintf.c,v retrieving revision 1.5 diff -u -p -r1.5 vswprintf.c --- vswprintf.c 7 Apr 2004 09:55:05 -0000 1.5 +++ vswprintf.c 21 Feb 2005 00:47:49 -0000 @@ -49,6 +49,7 @@ vswprintf(wchar_t * __restrict s, size_t struct __sFILEX ext; char *mbp; int ret, sverrno; + size_t nwc; if (n == 0) { errno = EINVAL; @@ -79,13 +80,13 @@ vswprintf(wchar_t * __restrict s, size_t * fputwc() did in __vfwprintf(). */ mbs = initial; - if (mbsrtowcs(s, (const char **)&mbp, n, &mbs) == (size_t)-1) { - free(f._bf._base); + nwc = mbsrtowcs(s, (const char **)&mbp, n, &mbs); + free(f._bf._base); + if (nwc == (size_t)-1) { errno = EILSEQ; return (-1); } - free(f._bf._base); - if (s[n - 1] != L'\0') { + if (nwc == n) { s[n - 1] = L'\0'; errno = EOVERFLOW; return (-1);