1234567891011121314151617181920212223242526272829 |
- #include "stdio_impl.h"
- #include "locale_impl.h"
- #include <wchar.h>
- 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);
|