Index: fhandler_tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_tty.cc,v
retrieving revision 1.32
diff -u -p -2 -r1.32 fhandler_tty.cc
--- fhandler_tty.cc	2001/04/24 02:07:58	1.32
+++ fhandler_tty.cc	2001/04/26 12:54:06
@@ -168,16 +168,38 @@ int
 fhandler_pty_master::accept_input ()
 {
-  DWORD written;
+  DWORD bytes_left, written;
   DWORD n;
   DWORD rc;
+  char* p;
 
   rc = WaitForSingleObject (input_mutex, INFINITE);
 
-  n = get_ttyp ()->read_retval = eat_readahead (-1);
+  bytes_left = n = eat_readahead (-1);
+  get_ttyp ()->read_retval = 0;
+  p = rabuf;
 
   if (n != 0)
     {
-      termios_printf ("about to write %d chars to slave", n);
-      rc = WriteFile (get_output_handle (), rabuf, n, &written, NULL);
+      while (bytes_left > 0)
+        {
+	  termios_printf ("about to write %d chars to slave", bytes_left);
+	  rc = WriteFile (get_output_handle (), p, bytes_left, &written, NULL);
+	  if (!rc)
+	    {
+	      debug_printf ("error writing to pipe %E");
+              break;
+	    }
+          get_ttyp ()->read_retval += written;
+          p += written;
+          bytes_left -= written;
+          if (bytes_left > 0)
+            {
+	      debug_printf ("to_slave pipe is full");
+	      SetEvent (input_available_event);
+	      ReleaseMutex (input_mutex);
+              Sleep (10);
+	      rc = WaitForSingleObject (input_mutex, INFINITE);
+            }
+	}
     }
   else
Index: tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/tty.cc,v
retrieving revision 1.20
diff -u -p -2 -r1.20 tty.cc
--- tty.cc	2001/04/24 15:25:30	1.20
+++ tty.cc	2001/04/26 12:54:06
@@ -368,4 +368,8 @@ tty::make_pipes (fhandler_pty_master *pt
   termios_printf ("tty%d from_slave %p, to_slave %p", ntty, from_slave,
 		  to_slave);
+
+  DWORD pipe_mode = PIPE_NOWAIT;
+  if (!SetNamedPipeHandleState (to_slave, &pipe_mode, NULL, NULL))
+    termios_printf ("can't set to_slave to non-blocking mode");
   ptym->set_io_handle (from_slave);
   ptym->set_output_handle (to_slave);
