From: Luis Lavena Date: 2012-11-20T02:31:22+09:00 Subject: [ruby-core:49588] Re: [ruby-trunk - Bug #7379] Unexpected result of Kernel#gets on Windows 8 On Mon, Nov 19, 2012 at 9:56 AM, phasis68 (Heesob Park) wrote: > > Issue #7379 has been updated by phasis68 (Heesob Park). > > > Is there anybody who has Windows 8 among committers? I don't have Windows 8 final right now to test, but I do have a previous version, which I'm setting up in a VM. Will take a look later today. > > As I mentioned at http://bugs.ruby-lang.org/issues/7352, > I don't want to be a committer. > > ---------------------------------------- > Bug #7379: Unexpected result of Kernel#gets on Windows 8 > https://bugs.ruby-lang.org/issues/7379#change-33096 > > Author: phasis68 (Heesob Park) > Status: Assigned > Priority: Normal > Assignee: usa (Usaku NAKAMURA) > Category: core > Target version: 2.0.0 > ruby -v: ruby 2.0.0dev (2012-11-17 trunk 37691) [i386-mswin32_110] > > > 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); > > > > -- > http://bugs.ruby-lang.org/ > -- Luis Lavena AREA 17 - Perfection in design is achieved not when there is nothing more to add, but rather when there is nothing more to take away. Antoine de Saint-Exup��ry