diff options
author | Matt Johnston <matt@ucc.asn.au> | 2004-08-18 12:42:21 +0000 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2004-08-18 12:42:21 +0000 |
commit | a69e355a0630c1fe99f06e163f8260974758c193 (patch) | |
tree | 6aa2566c70c15dfa903cbaa0cfa58e091785c6dd /cli-chansession.c | |
parent | e17d27d91d3f8f255981a780059be9ef7a4f2067 (diff) |
Don't leave the stdin FD non-blocking on exit - busybox doesn't like it.
--HG--
extra : convert_revision : 9c2b10bf10f9d38f62490346b53268a07afa0c3a
Diffstat (limited to 'cli-chansession.c')
-rw-r--r-- | cli-chansession.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/cli-chansession.c b/cli-chansession.c index c6855a3..267a07f 100644 --- a/cli-chansession.c +++ b/cli-chansession.c @@ -63,6 +63,10 @@ static void cli_closechansess(struct Channel *channel) { cli_tty_cleanup(); /* Restore tty modes etc */ + /* Set stdin back to non-blocking - busybox ash dies nastily + * if we don't revert the flags */ + fcntl(cli_ses.stdincopy, F_SETFL, cli_ses.stdinflags); + } static void start_channel_request(struct Channel *channel, @@ -313,6 +317,11 @@ static void send_chansess_shell_req(struct Channel *channel) { static int cli_initchansess(struct Channel *channel) { + /* We store stdin's flags, so we can set them back on exit (otherwise + * busybox's ash isn't happy */ + cli_ses.stdincopy = dup(STDIN_FILENO); + cli_ses.stdinflags = fcntl(STDIN_FILENO, F_GETFL, 0); + channel->infd = STDOUT_FILENO; //channel->outfd = STDIN_FILENO; //channel->errfd = STDERR_FILENO; |