diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index e32d75dab8..67c886efad 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -406,7 +406,23 @@ BOOL WINAPI ReadFile( HANDLE hFile, LPVOID buffer, DWORD bytesToRead, if (!bytesToRead) return TRUE; if (is_console_handle(hFile)) - return ReadConsoleA(hFile, buffer, bytesToRead, bytesRead, NULL); + { + DWORD conread, mode; + if (!ReadConsoleA(hFile, buffer, bytesToRead, &conread, NULL) || + !GetConsoleMode(hFile, &mode)) + return FALSE; + /* ctrl-Z (26) means end of file on window (if at beginning of buffer) + * but Unix uses ctrl-D (4), and ctrl-Z is a bad idea on Unix :-/ + * So map both ctrl-D ctrl-Z to EOF. + */ + if ((mode & ENABLE_PROCESSED_INPUT) && conread > 0 && + (((char*)buffer)[0] == 26 || ((char*)buffer)[0] == 4)) + { + conread = 0; + } + if (bytesRead) *bytesRead = conread; + return TRUE; + } if (overlapped != NULL) {