summaryrefslogtreecommitdiff
path: root/src/stdio/fwide.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdio/fwide.c')
-rw-r--r--src/stdio/fwide.c11
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;