[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]