mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-15 16:22:49 +02:00
Sync OpenBSD patchset 350:
Support -c like sh(1) to execute a command, useful when tmux is a login shell. Suggested by halex@. This includes another protocol version increase (the last for now) so again restart the tmux server before upgrading.
This commit is contained in:
18
tty.c
18
tty.c
@ -1,4 +1,4 @@
|
||||
/* $Id: tty.c,v 1.137 2009-09-23 15:08:21 tcunha Exp $ */
|
||||
/* $Id: tty.c,v 1.138 2009-09-23 15:18:56 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -44,7 +44,6 @@ void tty_cell(struct tty *,
|
||||
void
|
||||
tty_init(struct tty *tty, int fd, char *term)
|
||||
{
|
||||
int mode;
|
||||
char *path;
|
||||
|
||||
memset(tty, 0, sizeof *tty);
|
||||
@ -55,10 +54,6 @@ tty_init(struct tty *tty, int fd, char *term)
|
||||
else
|
||||
tty->termname = xstrdup(term);
|
||||
|
||||
if ((mode = fcntl(fd, F_GETFL)) == -1)
|
||||
fatal("fcntl failed");
|
||||
if (fcntl(fd, F_SETFL, mode|O_NONBLOCK) == -1)
|
||||
fatal("fcntl failed");
|
||||
if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)
|
||||
fatal("fcntl failed");
|
||||
tty->fd = fd;
|
||||
@ -129,6 +124,7 @@ void
|
||||
tty_start_tty(struct tty *tty)
|
||||
{
|
||||
struct termios tio;
|
||||
int mode;
|
||||
#ifdef TIOCFLUSH
|
||||
int what;
|
||||
#endif
|
||||
@ -136,6 +132,11 @@ tty_start_tty(struct tty *tty)
|
||||
if (tty->fd == -1)
|
||||
return;
|
||||
|
||||
if ((mode = fcntl(tty->fd, F_GETFL)) == -1)
|
||||
fatal("fcntl failed");
|
||||
if (fcntl(tty->fd, F_SETFL, mode|O_NONBLOCK) == -1)
|
||||
fatal("fcntl failed");
|
||||
|
||||
#if 0
|
||||
tty_detect_utf8(tty);
|
||||
#endif
|
||||
@ -187,6 +188,7 @@ void
|
||||
tty_stop_tty(struct tty *tty)
|
||||
{
|
||||
struct winsize ws;
|
||||
int mode;
|
||||
|
||||
if (!(tty->flags & TTY_STARTED))
|
||||
return;
|
||||
@ -197,6 +199,10 @@ tty_stop_tty(struct tty *tty)
|
||||
* because the fd is invalid. Things like ssh -t can easily leave us
|
||||
* with a dead tty.
|
||||
*/
|
||||
if ((mode = fcntl(tty->fd, F_GETFL)) == -1)
|
||||
return;
|
||||
if (fcntl(tty->fd, F_SETFL, mode & ~O_NONBLOCK) == -1)
|
||||
return;
|
||||
if (ioctl(tty->fd, TIOCGWINSZ, &ws) == -1)
|
||||
return;
|
||||
if (tcsetattr(tty->fd, TCSANOW, &tty->tio) == -1)
|
||||
|
Reference in New Issue
Block a user