1#include "stdio_impl.h" 2#include "locale_impl.h" 3#include <wchar.h> 4 5int 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 29weak_alias(fputws, fputws_unlocked); 30