Author: pluto                        Date: Wed Mar  9 14:18:24 2005 GMT
Module: SOURCES                       Tag: LINUX_2_6
---- Log message:
- fix from lkml.

---- Files affected:
SOURCES:
   linux-2.6-pty-is-losing-bytes.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/linux-2.6-pty-is-losing-bytes.patch
diff -u /dev/null SOURCES/linux-2.6-pty-is-losing-bytes.patch:1.1.2.1
--- /dev/null   Wed Mar  9 15:18:24 2005
+++ SOURCES/linux-2.6-pty-is-losing-bytes.patch Wed Mar  9 15:18:19 2005
@@ -0,0 +1,66 @@
+--- linux-2.6.orig/drivers/char/n_tty.c        2005-02-16 16:01:35.000000000 
+0100
++++ linux-2.6/drivers/char/n_tty.c     2005-02-16 19:17:13.053000548 +0100
+@@ -770,10 +770,8 @@ send_signal:
+               }
+               if (c == '\n') {
+                       if (L_ECHO(tty) || L_ECHONL(tty)) {
+-                              if (tty->read_cnt >= N_TTY_BUF_SIZE-1) {
++                              if (tty->read_cnt >= N_TTY_BUF_SIZE-1)
+                                       put_char('\a', tty);
+-                                      return;
+-                              }
+                               opost('\n', tty);
+                       }
+                       goto handle_newline;
+@@ -790,10 +788,8 @@ send_signal:
+                        * XXX are EOL_CHAR and EOL2_CHAR echoed?!?
+                        */
+                       if (L_ECHO(tty)) {
+-                              if (tty->read_cnt >= N_TTY_BUF_SIZE-1) {
++                              if (tty->read_cnt >= N_TTY_BUF_SIZE-1)
+                                       put_char('\a', tty);
+-                                      return;
+-                              }
+                               /* Record the column of first canon char. */
+                               if (tty->canon_head == tty->read_head)
+                                       tty->canon_column = tty->column;
+@@ -862,12 +858,9 @@ static int n_tty_receive_room(struct tty
+        * that erase characters will be handled.  Other excess
+        * characters will be beeped.
+        */
+-      if (tty->icanon && !tty->canon_data)
+-              return N_TTY_BUF_SIZE;
+-
+-      if (left > 0)
+-              return left;
+-      return 0;
++      if (left <= 0)
++              left = tty->icanon && !tty->canon_data;
++      return left;
+ }
+ 
+ /**
+@@ -1473,13 +1466,17 @@ static ssize_t write_chan(struct tty_str
+                       if (tty->driver->flush_chars)
+                               tty->driver->flush_chars(tty);
+               } else {
+-                      c = tty->driver->write(tty, b, nr);
+-                      if (c < 0) {
+-                              retval = c;
+-                              goto break_out;
++                      while (nr > 0) {
++                              c = tty->driver->write(tty, b, nr);
++                              if (c < 0) {
++                                      retval = c;
++                                      goto break_out;
++                              }
++                              if (!c)
++                                      break;
++                              b += c;
++                              nr -= c;
+                       }
+-                      b += c;
+-                      nr -= c;
+               }
+               if (!nr)
+                       break;
================================================================

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to