author | Rich Felker <dalias@aerifal.cx> | 2015年06月16日 05:35:31 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015年06月16日 06:10:29 +0000 |
commit | 16f18d036d9a7bf590ee6eb86785c0a9658220b6 (patch) | |
tree | deb18b50c750e47dce2e0de0061f6de93cb11957 /src/stdio/fputwc.c | |
parent | 1507ebf837334e9e07cfab1ca1c2e88449069a80 (diff) | |
download | musl-16f18d036d9a7bf590ee6eb86785c0a9658220b6.tar.gz |
-rw-r--r-- | src/stdio/fputwc.c | 5 |
diff --git a/src/stdio/fputwc.c b/src/stdio/fputwc.c index 1bf165bf..789fe9c9 100644 --- a/src/stdio/fputwc.c +++ b/src/stdio/fputwc.c @@ -1,4 +1,5 @@ #include "stdio_impl.h" +#include "locale_impl.h" #include <wchar.h> #include <limits.h> #include <ctype.h> @@ -7,8 +8,10 @@ wint_t __fputwc_unlocked(wchar_t c, FILE *f) { char mbc[MB_LEN_MAX]; int l; + locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; if (f->mode <= 0) fwide(f, 1); + *ploc = f->locale; if (isascii(c)) { c = putc_unlocked(c, f); @@ -20,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; } |