diff options
author | Eric Andersen | 2004-08-19 18:22:13 +0000 |
---|---|---|
committer | Eric Andersen | 2004-08-19 18:22:13 +0000 |
commit | cb01bb1d6876edbcff428b75f110ba1b237e08d9 (patch) | |
tree | 4252286f7781b0b890634077bc59caac66b3ff4e | |
parent | 9ab4657c8908b923a2e4a1cae97e0471bb51809e (diff) | |
download | busybox-cb01bb1d6876edbcff428b75f110ba1b237e08d9.zip busybox-cb01bb1d6876edbcff428b75f110ba1b237e08d9.tar.gz |
Patch from Vladimir N. Oleynik:
On Wed Aug 18, 2004 at 06:52:57PM +0800, Matt Johnston wrote:
> I've come across some strange-seeming behaviour when running programs
> under Busybox (1.0.0-rc3) ash. If the child process sets stdin to be
> non-blocking and then exits, the parent ash will also exit. A quick strace
> shows that a subsequent read() from stdin returns EAGAIN (as would be
> expected):
Thanks!
Patch attached.
--w
vodz
-rw-r--r-- | shell/ash.c | 2 | ||||
-rw-r--r-- | shell/cmdedit.c | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c index 6d1dc60..6c6c286 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -6062,7 +6062,7 @@ retry: } goto retry; } - if(nr < 0) { + if(nr < 0 && errno == 0) { /* Ctrl+D presend */ nr = 0; } diff --git a/shell/cmdedit.c b/shell/cmdedit.c index 25d31a0..56b789a 100644 --- a/shell/cmdedit.c +++ b/shell/cmdedit.c @@ -1297,6 +1297,7 @@ int cmdedit_read_input(char *prompt, char command[BUFSIZ]) /* Control-d -- Delete one character, or exit * if the len=0 and no chars to delete */ if (len == 0) { + errno = 0; prepare_to_die: #if !defined(CONFIG_ASH) printf("exit"); |