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