Author: hbelusca
Date: Sat Feb 28 23:50:01 2015
New Revision: 66507
URL: 
http://svn.reactos.org/svn/reactos?rev=66507&view=rev
Log:
[HELP]: Fix console output for languages using non-latin characters. Patch by Vort.
CORE-7409 #resolve #comment Fixed, thanks!
Modified:
    trunk/reactos/base/applications/cmdutils/help/help.c
Modified: trunk/reactos/base/applications/cmdutils/help/help.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/cmdutils…
==============================================================================
--- trunk/reactos/base/applications/cmdutils/help/help.c        [iso-8859-1] (original)
+++ trunk/reactos/base/applications/cmdutils/help/help.c        [iso-8859-1] Sat Feb 28
23:50:01 2015
@@ -21,50 +21,21 @@
 #include "help.h"
 #include "resource.h"
-BOOL IsConsoleHandle(HANDLE hHandle)
-{
-    DWORD dwMode;
-
-    /* Check whether the handle may be that of a console... */
-    if ((GetFileType(hHandle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR)
-        return FALSE;
-
-    /*
-     * It may be. Perform another test... The idea comes from the
-     * MSDN description of the WriteConsole API:
-     *
-     * "WriteConsole fails if it is used with a standard handle
-     *  that is redirected to a file. If an application processes
-     *  multilingual output that can be redirected, determine whether
-     *  the output handle is a console handle (one method is to call
-     *  the GetConsoleMode function and check whether it succeeds).
-     *  If the handle is a console handle, call WriteConsole. If the
-     *  handle is not a console handle, the output is redirected and
-     *  you should call WriteFile to perform the I/O."
-     */
-    return GetConsoleMode(hHandle, &dwMode);
-}
-
 VOID PrintResourceString(INT resID, ...)
 {
-    HANDLE OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE);
-    WCHAR tmpBuffer[RC_STRING_MAX_SIZE];
-    va_list arg_ptr;
+    WCHAR bufSrc[RC_STRING_MAX_SIZE];
+    WCHAR bufFormatted[RC_STRING_MAX_SIZE];
+    CHAR bufFormattedOem[RC_STRING_MAX_SIZE];
-    va_start(arg_ptr, resID);
-    LoadStringW(GetModuleHandleW(NULL), resID, tmpBuffer, RC_STRING_MAX_SIZE);
+    va_list args;
+    va_start(args, resID);
-    // FIXME: Optimize by using Win32 console functions.
-    if (IsConsoleHandle(OutputHandle))
-    {
-        vfwprintf(stdout, tmpBuffer, arg_ptr);
-    }
-    else
-    {
-        vwprintf(tmpBuffer, arg_ptr);
-    }
+    LoadStringW(GetModuleHandleW(NULL), resID, bufSrc, RC_STRING_MAX_SIZE);
+    vswprintf(bufFormatted, bufSrc, args);
+    CharToOemW(bufFormatted, bufFormattedOem);
+    fputs(bufFormattedOem, stdout);
-    va_end(arg_ptr);
+    va_end(args);
 }
 BOOL IsInternalCommand(LPCWSTR Cmd)
@@ -75,7 +46,7 @@
     /* Invalid command */
     if (!Cmd) return FALSE;
-    for (i = 0; i < sizeof(InternalCommands)/sizeof(InternalCommands[0]); ++i)
+    for (i = 0; i < ARRAYSIZE(InternalCommands); ++i)
     {
         res = _wcsicmp(InternalCommands[i], Cmd);
         if (res == 0)