https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9716814879dc19643663f8...
commit 9716814879dc19643663f8951d8ad1d681fd1cae Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Sat Dec 23 23:56:04 2017 +0100
[NTVDM] Deduplicate IsConsoleHandle() using the correct version pointed by Hermès. #179 --- subsystems/mvdm/ntvdm/console/console.c | 24 ++++++++++++++++++++++++ subsystems/mvdm/ntvdm/console/video.c | 24 ------------------------ subsystems/mvdm/ntvdm/ntvdm.h | 1 + 3 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/subsystems/mvdm/ntvdm/console/console.c b/subsystems/mvdm/ntvdm/console/console.c index 72200a103a..db2a468273 100644 --- a/subsystems/mvdm/ntvdm/console/console.c +++ b/subsystems/mvdm/ntvdm/console/console.c @@ -500,6 +500,30 @@ ConsoleCleanup(VOID) if (ConsoleInput != INVALID_HANDLE_VALUE) CloseHandle(ConsoleInput); }
+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 MenuEventHandler(PMENU_EVENT_RECORD MenuEvent) { switch (MenuEvent->dwCommandId) diff --git a/subsystems/mvdm/ntvdm/console/video.c b/subsystems/mvdm/ntvdm/console/video.c index de2910c90d..d19841b7f2 100644 --- a/subsystems/mvdm/ntvdm/console/video.c +++ b/subsystems/mvdm/ntvdm/console/video.c @@ -436,30 +436,6 @@ static VOID DetachFromConsoleInternal(VOID) TextFramebuffer = NULL; }
-static 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); -} - static VOID SetActiveScreenBuffer(HANDLE ScreenBuffer) { ASSERT(ScreenBuffer); diff --git a/subsystems/mvdm/ntvdm/ntvdm.h b/subsystems/mvdm/ntvdm/ntvdm.h index 616cc70aac..60a763fd15 100644 --- a/subsystems/mvdm/ntvdm/ntvdm.h +++ b/subsystems/mvdm/ntvdm/ntvdm.h @@ -103,6 +103,7 @@ UpdateVdmMenuDisks(VOID); BOOL ConsoleAttach(VOID); VOID ConsoleDetach(VOID); VOID ConsoleReattach(HANDLE ConOutHandle); +BOOL IsConsoleHandle(HANDLE hHandle); VOID MenuEventHandler(PMENU_EVENT_RECORD MenuEvent); VOID FocusEventHandler(PFOCUS_EVENT_RECORD FocusEvent);