github.com/afumu/libc@v0.0.6/musl/src/stdio/fputws.c (about) 1 #include "stdio_impl.h" 2 #include "locale_impl.h" 3 #include <wchar.h> 4 5 int fputws(const wchar_t *restrict ws, FILE *restrict f) 6 { 7 unsigned char buf[BUFSIZ]; 8 size_t l=0; 9 locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; 10 11 FLOCK(f); 12 13 fwide(f, 1); 14 *ploc = f->locale; 15 16 while (ws && (l = wcsrtombs((void *)buf, (void*)&ws, sizeof buf, 0))+1 > 1) 17 if (__fwritex(buf, l, f) < l) { 18 FUNLOCK(f); 19 *ploc = loc; 20 return -1; 21 } 22 23 FUNLOCK(f); 24 25 *ploc = loc; 26 return l; /* 0 or -1 */ 27 } 28 29 weak_alias(fputws, fputws_unlocked);