X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fptyfwd.c;h=85fc8f1b34f5c6770ad052d041e6d74e0f44dcd1;hb=e7d43b3cc30764138c90eaaf95d3d8f49e448890;hp=72aa59efb7e30be87ce82e8accd8470cae6a20a2;hpb=ccf22d4a104e6ed2666d6c5b4031981a84787790;p=elogind.git diff --git a/src/shared/ptyfwd.c b/src/shared/ptyfwd.c index 72aa59efb..85fc8f1b3 100644 --- a/src/shared/ptyfwd.c +++ b/src/shared/ptyfwd.c @@ -343,8 +343,8 @@ static int process_pty_loop(int master, sigset_t *mask, pid_t kill_pid, int sign int process_pty(int master, sigset_t *mask, pid_t kill_pid, int signo) { struct termios saved_stdin_attr, raw_stdin_attr; struct termios saved_stdout_attr, raw_stdout_attr; - bool saved_stdin = false; - bool saved_stdout = false; + struct termios master_attr; + bool saved_stdin = false, saved_stdout = false; struct winsize ws; int r; @@ -369,6 +369,11 @@ int process_pty(int master, sigset_t *mask, pid_t kill_pid, int signo) { tcsetattr(STDOUT_FILENO, TCSANOW, &raw_stdout_attr); } + if (tcgetattr(master, &master_attr) >= 0) { + cfmakeraw(&master_attr); + tcsetattr(master, TCSANOW, &master_attr); + } + r = process_pty_loop(master, mask, kill_pid, signo); if (saved_stdout)