bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?


From: Dmitry Goncharov
Subject: Re: ``read -N n -t timeout'' saves partial input only when EOF is seen?
Date: Fri, 25 Nov 2016 09:57:40 -0500

Auto variables have unspecified values after a call to longjmp.
This patch fixes the bug.

regards, Dmitry

diff --git a/builtins/read.def b/builtins/read.def
index 5e2348c..938b62a 100644
--- a/builtins/read.def
+++ b/builtins/read.def
@@ -181,7 +181,8 @@ read_builtin (list)
      WORD_LIST *list;
 {
   register char *varname;
-  int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
+  int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
+  volatile int i;
   int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
   int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno;
   unsigned int tmsec, tmusec;


On Thu, Nov 24, 2016 at 10:32 PM, Clark Wang <address@hidden> wrote:
On Fri, Nov 25, 2016 at 7:05 AM, L A Walsh <address@hidden> wrote:


isabella parakiss wrote:
that's not true https://gist.github.com/fa4efd90376ff2714901e4429fdee734
read successfully reads the data, but then it's discarded by bash
 
----
   It's discarded by bash because the read doesn't read 10
characters within the time limit.  If you use -N 5, you get
your output.   "-t" says it will timeout and return failure if a
specified number of characters is not read within timeout period.

The manual for -t says:

If read times out, read saves any partial input read into the specified variable name.

-clark


If timeout is exceeded, then return status is > 128:

bash -c '( printf 12345; sleep 2 ) | ( read -t 1 -N 10 v; echo "s=$?, <$v>" )'
s=142, <>

(status is > 128)

 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]