Loading...
--- Libc/Libc-320.1.3/stdio/FreeBSD/vswprintf.c
+++ Libc/Libc-391.2.7/stdio/FreeBSD/vswprintf.c
@@ -31,7 +31,7 @@
#if 0
__FBSDID("FreeBSD: src/lib/libc/stdio/vasprintf.c,v 1.16 2002/08/21 16:19:57 mike Exp ");
#endif
-__FBSDID("$FreeBSD: src/lib/libc/stdio/vswprintf.c,v 1.3 2003/01/07 06:20:47 tjr Exp $");
+__FBSDID("$FreeBSD: src/lib/libc/stdio/vswprintf.c,v 1.5 2004/04/07 09:55:05 tjr Exp $");
#include <errno.h>
#include <stdio.h>
@@ -43,9 +43,10 @@
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;
- mbstate_t mbs;
char *mbp;
int ret, sverrno;
@@ -73,11 +74,11 @@
}
*f._p = '\0';
mbp = f._bf._base;
- memset(&mbs, 0, sizeof(mbs));
/*
* XXX Undo the conversion from wide characters to multibyte that
* fputwc() did in __vfwprintf().
*/
+ mbs = initial;
if (mbsrtowcs(s, (const char **)&mbp, n, &mbs) == (size_t)-1) {
free(f._bf._base);
errno = EILSEQ;