From 485b8dfcf2e4865b2633ce10f046d7689db68d05 Mon Sep 17 00:00:00 2001 From: Hugh McMaster Date: Tue, 23 Jun 2015 21:27:23 +1000 Subject: [PATCH] regsvr32: Add WriteFile fallback if WriteConsole fails. --- programs/regsvr32/regsvr32.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/programs/regsvr32/regsvr32.c b/programs/regsvr32/regsvr32.c index 1c9d1b05a78..2e7af5bf02c 100644 --- a/programs/regsvr32/regsvr32.c +++ b/programs/regsvr32/regsvr32.c @@ -93,9 +93,23 @@ static void __cdecl output_write(UINT id, ...) ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, len, &nOut, NULL); + /* WriteConsole fails if its output is redirected to a file. + * If this occurs, we should use an OEM codepage and call WriteFile. + */ if (!ret) - WINE_WARN("regsvr32: WriteConsoleW() failed.\n"); + { + DWORD lenA; + char *strA; + lenA = WideCharToMultiByte(GetConsoleOutputCP(), 0, str, len, NULL, 0, NULL, NULL); + strA = HeapAlloc(GetProcessHeap(), 0, lenA); + if (strA) + { + WideCharToMultiByte(GetConsoleOutputCP(), 0, str, len, strA, lenA, NULL, NULL); + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), strA, lenA, &nOut, FALSE); + HeapFree(GetProcessHeap(), 0, strA); + } + } LocalFree(str); }