summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2009-05-31 19:37:06 +0000
committerjilles <jilles@FreeBSD.org>2009-05-31 19:37:06 +0000
commit5abe4e352a7991dbf19ad41881b6a4d5bd5aaa0e (patch)
tree90883b19fbe245d8e450edc74499e70291c68559 /bin
parentd5a70a77bc470854a180ef21bcca7705d0c31e01 (diff)
downloadFreeBSD-src-5abe4e352a7991dbf19ad41881b6a4d5bd5aaa0e.zip
FreeBSD-src-5abe4e352a7991dbf19ad41881b6a4d5bd5aaa0e.tar.gz
sh: Make read's timeout (-t) apply to the entire line, not only the first
character. This avoids using non-standard behaviour of the old (upto FreeBSD 7) TTY layer: it reprocesses the input queue when switching to canonical mode. The new TTY layer does not provide this functionality and so read -t worked very poorly (first character is not echoed, cannot be backspaced but is still read). This also agrees with what most other shells with read -t do. PR: bin/129566 Reviewed by: stefanf Approved by: ed (mentor)
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/miscbltin.c17
-rw-r--r--bin/sh/sh.14
2 files changed, 2 insertions, 19 deletions
diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c
index 2480c0d..acb5654 100644
--- a/bin/sh/miscbltin.c
+++ b/bin/sh/miscbltin.c
@@ -103,8 +103,6 @@ readcmd(int argc __unused, char **argv __unused)
struct timeval tv;
char *tvptr;
fd_set ifds;
- struct termios told, tnew;
- int tsaved;
rflag = 0;
prompt = NULL;
@@ -151,26 +149,11 @@ readcmd(int argc __unused, char **argv __unused)
if (tv.tv_sec >= 0) {
/*
- * See if we can disable input processing; this will
- * not give the desired result if we are in a pipeline
- * and someone upstream is still in line-by-line mode.
- */
- tsaved = 0;
- if (tcgetattr(0, &told) == 0) {
- memcpy(&tnew, &told, sizeof(told));
- cfmakeraw(&tnew);
- tnew.c_iflag |= told.c_iflag & ICRNL;
- tcsetattr(0, TCSANOW, &tnew);
- tsaved = 1;
- }
- /*
* Wait for something to become available.
*/
FD_ZERO(&ifds);
FD_SET(0, &ifds);
status = select(1, &ifds, NULL, NULL, &tv);
- if (tsaved)
- tcsetattr(0, TCSANOW, &told);
/*
* If there's nothing ready, return an error.
*/
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
index c18c190..cc8874e 100644
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -32,7 +32,7 @@
.\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95
.\" $FreeBSD$
.\"
-.Dd October 7, 2006
+.Dd May 31, 2009
.Dt SH 1
.Os
.Sh NAME
@@ -1949,7 +1949,7 @@ If the
.Fl t
option is specified and the
.Ar timeout
-elapses before any input is supplied,
+elapses before a complete line of input is supplied,
the
.Ic read
command will return an exit status of 1 without assigning any values.
OpenPOWER on IntegriCloud