Avoid console input behavior in windows 10 [Bug #18588]

When ANSI versions of PeekConsoleInput read multibyte charactor
partially, subsequent ReadFile returns wrong data on newer Windows
10 versions (probably since Windows Terminal introduced).  To
avoid this, use Unicode version of of PeekConsoleInput/ReadConsole.
This commit is contained in:
YO4 2022-03-16 10:28:35 +09:00 коммит произвёл GitHub
Родитель 48f1e8c5d8
Коммит 5d90c60109
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 3 добавлений и 3 удалений

Просмотреть файл

@ -3085,7 +3085,7 @@ is_console(SOCKET sock) /* DONT call this for SOCKET! */
INPUT_RECORD ir;
RUBY_CRITICAL {
ret = (PeekConsoleInput((HANDLE)sock, &ir, 1, &n));
ret = (PeekConsoleInputW((HANDLE)sock, &ir, 1, &n));
}
return ret;
@ -3100,13 +3100,13 @@ is_readable_console(SOCKET sock) /* call this for console only */
INPUT_RECORD ir;
RUBY_CRITICAL {
if (PeekConsoleInput((HANDLE)sock, &ir, 1, &n) && n > 0) {
if (PeekConsoleInputW((HANDLE)sock, &ir, 1, &n) && n > 0) {
if (ir.EventType == KEY_EVENT && ir.Event.KeyEvent.bKeyDown &&
ir.Event.KeyEvent.uChar.AsciiChar) {
ret = 1;
}
else {
ReadConsoleInput((HANDLE)sock, &ir, 1, &n);
ReadConsoleInputW((HANDLE)sock, &ir, 1, &n);
}
}
}