X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Ffputws.c;h=0ed02f1c004e8622e0d4367116a60f22e249720f;hb=1d5750b95c06913a1f18a995481276d698d20fae;hp=9057853bcc24ce126fe08aad5920620a7846b7d2;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/fputws.c b/src/stdio/fputws.c index 9057853b..0ed02f1c 100644 --- a/src/stdio/fputws.c +++ b/src/stdio/fputws.c @@ -1,22 +1,28 @@ #include "stdio_impl.h" +#include "locale_impl.h" +#include -int fputws(const wchar_t *ws, FILE *f) +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); - f->mode |= f->mode+1; + fwide(f, 1); + *ploc = f->locale; - while (ws && (l = wcsrtombs(buf, (void*)&ws, sizeof buf, 0))+1 > 1) + 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 */ }