X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/59e0d9fe772464b93d835d2a2964457702469a43..7b00c0c43f52e9d27168e67a26aac19065cdb40c:/stdio/FreeBSD/vswprintf.c.patch diff --git a/stdio/FreeBSD/vswprintf.c.patch b/stdio/FreeBSD/vswprintf.c.patch index 159d765..9e5555c 100644 --- a/stdio/FreeBSD/vswprintf.c.patch +++ b/stdio/FreeBSD/vswprintf.c.patch @@ -1,26 +1,63 @@ ---- vswprintf.c.orig Tue May 20 15:22:44 2003 -+++ vswprintf.c Wed Nov 12 00:30:05 2003 -@@ -48,6 +48,7 @@ +--- vswprintf.c.orig 2009-11-30 16:15:30.000000000 -0800 ++++ vswprintf.c 2009-12-03 15:21:59.000000000 -0800 +@@ -33,6 +33,8 @@ __FBSDID("FreeBSD: src/lib/libc/stdio/va + #endif + __FBSDID("$FreeBSD: src/lib/libc/stdio/vswprintf.c,v 1.7 2008/04/17 22:17:54 jhb Exp $"); + ++#include "xlocale_private.h" ++ + #include + #include + #include +@@ -40,8 +42,8 @@ __FBSDID("$FreeBSD: src/lib/libc/stdio/v + #include "local.h" + + int +-vswprintf(wchar_t * __restrict s, size_t n, const wchar_t * __restrict fmt, +- __va_list ap) ++vswprintf_l(wchar_t * __restrict s, size_t n, locale_t loc, ++ const wchar_t * __restrict fmt, __va_list ap) + { + static const mbstate_t initial; mbstate_t mbs; +@@ -49,7 +51,11 @@ vswprintf(wchar_t * __restrict s, size_t char *mbp; int ret, sverrno; -+ size_t conv; + size_t nwc; ++ struct __sFILEX ext; ++ f._extra = &ext; ++ INITEXTRA(&f); ++ NORMALIZE_LOCALE(loc); if (n == 0) { errno = EINVAL; -@@ -78,13 +79,13 @@ - * XXX Undo the conversion from wide characters to multibyte that + return (-1); +@@ -65,7 +71,7 @@ vswprintf(wchar_t * __restrict s, size_t + f._bf._size = f._w = 127; /* Leave room for the NUL */ + f._orientation = 0; + memset(&f._mbstate, 0, sizeof(mbstate_t)); +- ret = __vfwprintf(&f, fmt, ap); ++ ret = __vfwprintf(&f, loc, fmt, ap); + if (ret < 0) { + sverrno = errno; + free(f._bf._base); +@@ -79,7 +85,7 @@ vswprintf(wchar_t * __restrict s, size_t * fputwc() did in __vfwprintf(). */ -- if (mbsrtowcs(s, (const char **)&mbp, n, &mbs) == (size_t)-1) { -+ if ((conv = mbsrtowcs(s, (const char **)&mbp, n, &mbs)) == (size_t)-1) { - free(f._bf._base); - errno = EILSEQ; - return (-1); - } + mbs = initial; +- nwc = mbsrtowcs(s, (const char **)&mbp, n, &mbs); ++ nwc = mbsrtowcs_l(s, (const char **)&mbp, n, &mbs, loc); free(f._bf._base); -- if (s[n - 1] != L'\0') { -+ if (conv >= n) { - s[n - 1] = L'\0'; - errno = EOVERFLOW; - return (-1); + if (nwc == (size_t)-1) { + errno = EILSEQ; +@@ -93,3 +99,10 @@ vswprintf(wchar_t * __restrict s, size_t + + 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); ++}