#include "stdio_impl.h" #include "locale_impl.h" #include int fputws(const wchar_t *restrict ws, FILE *restrict f) { unsigned char buf[BUFSIZ]; size_t l=0; locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; FLOCK(f); fwide(f, 1); *ploc = f->locale; while (ws && (l = wcsrtombs((void *)buf, (void*)&ws, sizeof buf, 0))+1 > 1) if (__fwritex(buf, l, f) < l) { FUNLOCK(f); *ploc = loc; return -1; } FUNLOCK(f); *ploc = loc; return l; /* 0 or -1 */ } weak_alias(fputws, fputws_unlocked);