Module: wine Branch: master Commit: 279acf6a8aa16f84ab58dd15e9077cbc38de642c URL: http://source.winehq.org/git/wine.git/?a=commit;h=279acf6a8aa16f84ab58dd15e9...
Author: Alexandre Julliard julliard@winehq.org Date: Wed May 7 17:32:23 2008 +0200
winedos: Only read input from the stdin handle if it is a console.
---
dlls/winedos/dosvm.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/winedos/dosvm.c b/dlls/winedos/dosvm.c index 27dc3b7..7defba1 100644 --- a/dlls/winedos/dosvm.c +++ b/dlls/winedos/dosvm.c @@ -464,19 +464,18 @@ void WINAPI DOSVM_Wait( CONTEXT86 *waitctx ) DWORD WINAPI DOSVM_Loop( HANDLE hThread ) { HANDLE objs[2]; + int count = 0; MSG msg; DWORD waitret;
- objs[0] = GetStdHandle(STD_INPUT_HANDLE); - objs[1] = hThread; + objs[count++] = hThread; + if (GetConsoleMode( GetStdHandle(STD_INPUT_HANDLE), NULL )) + objs[count++] = GetStdHandle(STD_INPUT_HANDLE);
for(;;) { TRACE_(int)("waiting for action\n"); - waitret = MsgWaitForMultipleObjects(2, objs, FALSE, INFINITE, QS_ALLINPUT); + waitret = MsgWaitForMultipleObjects(count, objs, FALSE, INFINITE, QS_ALLINPUT); if (waitret == WAIT_OBJECT_0) { - DOSVM_ProcessConsole(); - } - else if (waitret == WAIT_OBJECT_0 + 1) { DWORD rv; if(!GetExitCodeThread(hThread, &rv)) { ERR("Failed to get thread exit code!\n"); @@ -484,7 +483,7 @@ DWORD WINAPI DOSVM_Loop( HANDLE hThread ) } return rv; } - else if (waitret == WAIT_OBJECT_0 + 2) { + else if (waitret == WAIT_OBJECT_0 + count) { while (PeekMessageA(&msg,0,0,0,PM_REMOVE)) { if (msg.hwnd) { /* it's a window message */ @@ -513,6 +512,10 @@ DWORD WINAPI DOSVM_Loop( HANDLE hThread ) } } } + else if (waitret == WAIT_OBJECT_0 + 1) + { + DOSVM_ProcessConsole(); + } else { ERR_(int)("MsgWaitForMultipleObjects returned unexpected value.\n");