diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-01-13 17:48:55 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-01-15 11:26:48 -0800 |
commit | c5522c645635939ac49e6cfecb02a64e768a76d6 (patch) | |
tree | 5fd14a6d41e4966b8c49480ef0913d4c03033264 /system/lib/libc/musl/src/stdio/vswprintf.c | |
parent | 3753753c60a0b2ecb7ebd0475408c02cfff4ec91 (diff) |
add musl fputws, fix vswprintf, add testing for fwprintf and swprintf as well1.8.14
Diffstat (limited to 'system/lib/libc/musl/src/stdio/vswprintf.c')
-rw-r--r-- | system/lib/libc/musl/src/stdio/vswprintf.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/system/lib/libc/musl/src/stdio/vswprintf.c b/system/lib/libc/musl/src/stdio/vswprintf.c index 7d237bae..e906f7ae 100644 --- a/system/lib/libc/musl/src/stdio/vswprintf.c +++ b/system/lib/libc/musl/src/stdio/vswprintf.c @@ -29,6 +29,7 @@ static size_t sw_write(FILE *f, const unsigned char *s, size_t l) int vswprintf(wchar_t *restrict s, size_t n, const wchar_t *restrict fmt, va_list ap) { +#if 0 // XXX EMSCRIPTEN int r; FILE f; unsigned char buf[256]; @@ -50,4 +51,20 @@ int vswprintf(wchar_t *restrict s, size_t n, const wchar_t *restrict fmt, va_lis r = vfwprintf(&f, fmt, ap); sw_write(&f, 0, 0); return r>=n ? -1 : r; +#else + // XXX EMSCRIPTEN: use memfs through libc fs + // we write to a file, which is in multibyte, then we read, then expand to widechar + #define TEMPFILE "emscripten.vswprintf.temp.buffer" + FILE *f = fopen(TEMPFILE, "wb"); + int r = vfwprintf(f, fmt, ap); + fclose(f); + f = fopen(TEMPFILE, "rb"); + char buffer[r+1]; + fread(buffer, 1, r, f); + fclose(f); + remove(TEMPFILE); + buffer[r] = 0; + r = mbstowcs(s, buffer, n); + return r>=n ? -1 : r; +#endif } |