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)