all printf variants: fix argument type handling for %c and %lc
[musl] / src / stdio / fwide.c
index fdf8e4b..8bab634 100644 (file)
@@ -1,13 +1,16 @@
 #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) 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;
 }