Loading...
stdio/FreeBSD/vswprintf.c Libc-1725.40.4 Libc-583
--- Libc/Libc-1725.40.4/stdio/FreeBSD/vswprintf.c
+++ Libc/Libc-583/stdio/FreeBSD/vswprintf.c
@@ -31,9 +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.7 2008/04/17 22:17:54 jhb Exp $");
-
-#include "xlocale_private.h"
+__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>
@@ -42,20 +40,16 @@
 #include "local.h"
 
 int
-vswprintf_l(wchar_t * __restrict s, size_t n, locale_t loc,
-    const wchar_t * __restrict fmt, __va_list ap)
+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;
 	int ret, sverrno;
-	size_t nwc;
-	struct __sFILEX ext;
-	f._extra = &ext;
-	INITEXTRA(&f);
 
-	NORMALIZE_LOCALE(loc);
 	if (n == 0) {
 		errno = EINVAL;
 		return (-1);
@@ -69,9 +63,9 @@
 		return (-1);
 	}
 	f._bf._size = f._w = 127;		/* Leave room for the NUL */
-	f._orientation = 0;
-	memset(&f._mbstate, 0, sizeof(mbstate_t));
-	ret = __vfwprintf(&f, loc, fmt, ap);
+	f._extra = &ext;
+	INITEXTRA(&f);
+	ret = __vfwprintf(&f, fmt, ap);
 	if (ret < 0) {
 		sverrno = errno;
 		free(f._bf._base);
@@ -79,19 +73,19 @@
 		return (-1);
 	}
 	*f._p = '\0';
-	mbp = (char*)f._bf._base;
+	mbp = f._bf._base;
 	/*
 	 * XXX Undo the conversion from wide characters to multibyte that
 	 * fputwc() did in __vfwprintf().
 	 */
 	mbs = initial;
-	nwc = mbsrtowcs_l(s, (const char **)&mbp, n, &mbs, loc);
-	free(f._bf._base);
-	if (nwc == (size_t)-1) {
+	if (mbsrtowcs(s, (const char **)&mbp, n, &mbs) == (size_t)-1) {
+		free(f._bf._base);
 		errno = EILSEQ;
 		return (-1);
 	}
-	if (nwc == n) {
+	free(f._bf._base);
+	if (s[n - 1] != L'\0') {
 		s[n - 1] = L'\0';
 		errno = EOVERFLOW;
 		return (-1);
@@ -99,10 +93,3 @@
 
 	return (ret);
 }
-
-int
-vswprintf(wchar_t * __restrict s, size_t n,
-    const wchar_t * __restrict fmt, __va_list ap)
-{
-	return vswprintf_l(s, n, __current_locale(), fmt, ap);
-}