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

ruby-changes:16084

From: usa <ko1@a...>
Date: Thu, 27 May 2010 22:36:39 +0900 (JST)
Subject: [ruby-changes:16084] Ruby:r28035 (trunk): * win32/win32.c (rb_w32_read): call ReadFile() with len = 0 before

usa	2010-05-27 22:36:26 +0900 (Thu, 27 May 2010)

  New Revision: 28035

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28035

  Log:
    * win32/win32.c (rb_w32_read): call ReadFile() with len = 0 before
      reading really on console, because the first ReadFile() call after
      PeekConsoleInput() always returns broken data. (Windows's bug).
      [ruby-core:29018]

  Modified files:
    trunk/ChangeLog
    trunk/win32/win32.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28034)
+++ ChangeLog	(revision 28035)
@@ -1,3 +1,10 @@
+Thu May 27 22:34:27 2010  NAKAMURA Usaku  <usa@r...>
+
+	* win32/win32.c (rb_w32_read): call ReadFile() with len = 0 before
+	  reading really on console, because the first ReadFile() call after
+	  PeekConsoleInput() always returns broken data. (Windows's bug).
+	  [ruby-core:29018]
+
 Thu May 27 12:42:23 2010  Akinori MUSHA  <knu@i...>
 
 	* LGPL: Removed.  We no longer have LGPL'd source files in our
Index: win32/win32.c
===================================================================
--- win32/win32.c	(revision 28034)
+++ win32/win32.c	(revision 28035)
@@ -5032,6 +5032,7 @@
     size_t len;
     size_t ret;
     OVERLAPPED ol, *pol = NULL;
+    int start = 0;
 
     if (is_socket(sock))
 	return rb_w32_recv(fd, buf, size, 0);
@@ -5054,8 +5055,17 @@
 
     ret = 0;
   retry:
-    /* get rid of console writing bug */
-    len = (_osfile(fd) & FDEV) ? min(16 * 1024, size) : size;
+    /* get rid of console reading bug */
+    if (is_console(_osfhnd(fd))) {
+	if (start)
+	    len = min(16 * 1024, size);
+	else {
+	    len = 0;
+	    start = 1;
+	}
+    }
+    else
+	len = size;
     size -= len;
 
     /* if have cancel_io, use Overlapped I/O */

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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