diff options
Diffstat (limited to 'src/stdio/fwide.c')
-rw-r--r-- | src/stdio/fwide.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/stdio/fwide.c b/src/stdio/fwide.c index 8088e7ad..8410b153 100644 --- a/src/stdio/fwide.c +++ b/src/stdio/fwide.c @@ -1,13 +1,14 @@ -#include <wchar.h> #include "stdio_impl.h" - -#define SH (8*sizeof(int)-1) -#define NORMALIZE(x) ((x)>>SH | -((-(x))>>SH)) +#include "locale_impl.h" int fwide(FILE *f, int mode) { FLOCK(f); - if (!f->mode) f->mode = NORMALIZE(mode); + if (mode) { + if (!f->locale) f->locale = MB_CUR_MAX==1 + ? C_LOCALE : UTF8_LOCALE; + if (!f->mode) f->mode = mode>0 ? 1 : -1; + } mode = f->mode; FUNLOCK(f); return mode; |