From cf79202e76dfd48425e7de5102b3da7346ab94ba Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Thu, 26 Apr 2012 20:13:00 +0200 Subject: [PATCH] --- yaml --- r: 304205 b: refs/heads/master c: 3fa10cc83fb92750af11fab81e11ad96dc75d656 h: refs/heads/master i: 304203: 76ba3f92159a33b08d331216bfba6d165e1f89fb v: v3 --- [refs] | 2 +- trunk/drivers/tty/n_tty.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 43319d013767..2065095c1015 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5d1a33fa5573702394a4d09a9872f3f930c06d58 +refs/heads/master: 3fa10cc83fb92750af11fab81e11ad96dc75d656 diff --git a/trunk/drivers/tty/n_tty.c b/trunk/drivers/tty/n_tty.c index 94b6eda87afd..ee1c268f5f9d 100644 --- a/trunk/drivers/tty/n_tty.c +++ b/trunk/drivers/tty/n_tty.c @@ -1630,6 +1630,7 @@ static int copy_from_read_buf(struct tty_struct *tty, int retval; size_t n; unsigned long flags; + bool is_eof; retval = 0; spin_lock_irqsave(&tty->read_lock, flags); @@ -1639,15 +1640,15 @@ static int copy_from_read_buf(struct tty_struct *tty, if (n) { retval = copy_to_user(*b, &tty->read_buf[tty->read_tail], n); n -= retval; + is_eof = n == 1 && + tty->read_buf[tty->read_tail] == EOF_CHAR(tty); tty_audit_add_data(tty, &tty->read_buf[tty->read_tail], n); spin_lock_irqsave(&tty->read_lock, flags); tty->read_tail = (tty->read_tail + n) & (N_TTY_BUF_SIZE-1); tty->read_cnt -= n; /* Turn single EOF into zero-length read */ - if (L_EXTPROC(tty) && tty->icanon && n == 1) { - if (!tty->read_cnt && (*b)[n-1] == EOF_CHAR(tty)) - n--; - } + if (L_EXTPROC(tty) && tty->icanon && is_eof && !tty->read_cnt) + n = 0; spin_unlock_irqrestore(&tty->read_lock, flags); *b += n; *nr -= n;