From 3f3cc09865475e9d5adce2795676e7147a0a43ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net> Date: Mon, 14 May 2012 18:35:16 +0300 Subject: [PATCH] Win32: fallback to normal output if WriteConsoleW() fails This fixes console logs on Wine for me. --- src/text/unicode.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/text/unicode.c b/src/text/unicode.c index c6b066993f86..23e41c51d37d 100644 --- a/src/text/unicode.c +++ b/src/text/unicode.c @@ -74,27 +74,24 @@ int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap ) { HANDLE h = (HANDLE)((uintptr_t)_get_osfhandle (fd)); DWORD out; - /* XXX: It is not clear whether WriteConsole() wants the number of * Unicode characters or the size of the wchar_t array. */ - WriteConsoleW (h, wide, wcslen (wide), &out, NULL); + BOOL ok = WriteConsoleW (h, wide, wcslen (wide), &out, NULL); free (wide); + if (ok) + goto out; } - else - res = -1; } - else # endif + char *ansi = ToANSI (str); + if (ansi != NULL) { - char *ansi = ToANSI (str); - if (ansi != NULL) - { - fputs (ansi, stream); - free (ansi); - } - else - res = -1; + fputs (ansi, stream); + free (ansi); } + else + res = -1; +out: free (str); return res; #endif -- GitLab