ruby-changes:17996
From: usa <ko1@a...>
Date: Thu, 2 Dec 2010 13:42:35 +0900 (JST)
Subject: [ruby-changes:17996] Ruby:r30017 (trunk): * win32/win32.c (rb_w32_read): workaround for console reading troubles.
usa 2010-12-02 13:42:29 +0900 (Thu, 02 Dec 2010) New Revision: 30017 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30017 Log: * win32/win32.c (rb_w32_read): workaround for console reading troubles. fixed [ruby-core:33511] Modified files: trunk/ChangeLog trunk/win32/win32.c Index: ChangeLog =================================================================== --- ChangeLog (revision 30016) +++ ChangeLog (revision 30017) @@ -1,3 +1,8 @@ +Thu Dec 2 13:41:43 2010 NAKAMURA Usaku <usa@r...> + + * win32/win32.c (rb_w32_read): workaround for console reading troubles. + fixed [ruby-core:33511] + Thu Dec 2 13:10:42 2010 NARUSE, Yui <naruse@r...> * lib/uri/common.rb (URI.encode_www_form): Index: win32/win32.c =================================================================== --- win32/win32.c (revision 30016) +++ win32/win32.c (revision 30017) @@ -5045,6 +5045,7 @@ MTHREAD_ONLY(EnterCriticalSection(&(_pioinfo(fd)->lock))); if (!size || _osfile(fd) & FEOFLAG) { + _set_osflags(fd, _osfile(fd) & ~FEOFLAG); MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock)); return 0; } @@ -5055,7 +5056,7 @@ /* get rid of console reading bug */ if (isconsole) { if (start) - len = 1; + len = min(16*1024, size); else { len = 0; start = 1; @@ -5151,12 +5152,15 @@ } ret += read; - if (read == len) { + if (read >= len) { buf = (char *)buf + len; - if (size > 0) + if (!(isconsole && len == 1 && *((char *)buf - 1) == '\n') && size > 0) goto retry; } + if (read == 0) + _set_osflags(fd, _osfile(fd) | FEOFLAG); + MTHREAD_ONLY(LeaveCriticalSection(&_pioinfo(fd)->lock)); return ret; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/