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