Project

General

Profile

Actions

Backport #7379

closed

Unexpected result of Kernel#gets on Windows 8

Added by phasis68 (Heesob Park) over 11 years ago. Updated almost 11 years ago.

Status:
Closed
[ruby-core:49479]

Description

I found Kernel#gets returns invalid result for multi-byte string on Windows 8.

C:\Users\phasis>ruby -ve 'p gets'
ruby 2.0.0dev (2012-11-17 trunk 37691) [i386-mswin32_110]
한글
"\xC7\x00\xB1\x00\n"

After some debugging,I noticed that the previous ReadFile bug on console was fixed on Windows 8.
So the workaround code should be skipped on Windows 8.

Here is a patch:
cf. The OS version number of Windows 8 and Windows Server 2012 is 6.2.

diff --git a/win32.c b/win32.c.new
index 3446728..5635058 100644
--- a/win32.c
+++ b/win32.c.new
@@ -5902,7 +5902,7 @@ rb_w32_read(int fd, void *buf, size_t size)
}

 ret = 0;
  • isconsole = is_console(_osfhnd(fd));
  • isconsole = is_console(_osfhnd(fd)) && !(osver.dwMajorVersion==6 && osver.dwMinorVersion==2);
    if (isconsole) {
    DWORD mode;
    GetConsoleMode((HANDLE)_osfhnd(fd),&mode);
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0