X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Ffputwc.c;h=789fe9c90e98e72faccb570f373bb0ef8f5c384d;hb=37cd1676395e5ebdae3f372bf59d4fef54be9818;hp=ec49b5c6a5cbc813421e6cc065a47e17327b9abb;hpb=9ae8d5fc71a4b61ec826d58f03f7b543755fb1d4;p=musl diff --git a/src/stdio/fputwc.c b/src/stdio/fputwc.c index ec49b5c6..789fe9c9 100644 --- a/src/stdio/fputwc.c +++ b/src/stdio/fputwc.c @@ -1,15 +1,20 @@ #include "stdio_impl.h" +#include "locale_impl.h" +#include +#include +#include wint_t __fputwc_unlocked(wchar_t c, FILE *f) { char mbc[MB_LEN_MAX]; int l; + locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; - f->mode |= f->mode+1; + if (f->mode <= 0) fwide(f, 1); + *ploc = f->locale; if (isascii(c)) { - if (c != f->lbf && f->wpos + 1 < f->wend) *f->wpos++ = c; - else c = __overflow(f, c); + c = putc_unlocked(c, f); } else if (f->wpos + MB_LEN_MAX < f->wend) { l = wctomb((void *)f->wpos, c); if (l < 0) c = WEOF; @@ -18,6 +23,8 @@ wint_t __fputwc_unlocked(wchar_t c, FILE *f) l = wctomb(mbc, c); if (l < 0 || __fwritex((void *)mbc, l, f) < l) c = WEOF; } + if (c==WEOF) f->flags |= F_ERR; + *ploc = loc; return c; } @@ -26,7 +33,7 @@ wint_t fputwc(wchar_t c, FILE *f) FLOCK(f); c = __fputwc_unlocked(c, f); FUNLOCK(f); - return 0; + return c; } weak_alias(__fputwc_unlocked, fputwc_unlocked);