Don't call SetConsoleOutputCP

Should use wide-string function instead of SetConsoleOutputCP.

Fixes #1121
This commit is contained in:
Yasuhiro Matsumoto authored and Nicolas Williams committed 2017-02-25 18:51:04 -06:00
1 parent 12c60b2f32
commit 5d058fa416
2 files changed
+14 -4

No files matched your search

+14 -3
View File
@@ -37,9 +37,20 @@ static void put_buf(const char *s, int len, FILE *fout, jv *strout, int is_tty)
} else {
#ifdef WIN32
/* See util.h */
if (is_tty)
WriteFile((HANDLE)_get_osfhandle(fileno(fout)), s, len, NULL, NULL);
else
if (is_tty) {
wchar_t *ws;
size_t wl;
if (len == -1)
len = strlen(s);
wl = MultiByteToWideChar(CP_UTF8, 0, s, len, NULL, 0);
ws = malloc((wl + 1) * sizeof(*ws));
if (!ws)
return;
wl = MultiByteToWideChar(CP_UTF8, 0, s, len, ws, wl + 1);
ws[wl] = 0;
WriteConsoleW((HANDLE)_get_osfhandle(fileno(fout)), ws, wl, NULL, NULL);
free(ws);
} else
fwrite(s, 1, len, fout);
#else
fwrite(s, 1, len, fout);
-1
View File
@@ -203,7 +203,6 @@ int main(int argc, char* argv[]) {
jv program_arguments = jv_array();
#ifdef WIN32
SetConsoleOutputCP(CP_UTF8);
fflush(stdout);
fflush(stderr);
_setmode(fileno(stdout), _O_TEXT | _O_U8TEXT);