Allow the dtach -n mode to be used without a terminal. If a terminal is not
present when dtach is started, we now rely on whatever default terminal settings the kernel uses.
This commit is contained in:
parent
76b04f84f0
commit
3b070abf7a
1
dtach.h
1
dtach.h
|
|
@ -76,6 +76,7 @@
|
|||
extern char *progname, *sockname;
|
||||
extern int detach_char, no_suspend, redraw_method;
|
||||
extern struct termios orig_term;
|
||||
extern int dont_have_tty;
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
|
|||
20
main.c
20
main.c
|
|
@ -44,6 +44,7 @@ int redraw_method = REDRAW_UNSPEC;
|
|||
** it to restore the original settings.
|
||||
*/
|
||||
struct termios orig_term;
|
||||
int dont_have_tty;
|
||||
|
||||
static void
|
||||
usage()
|
||||
|
|
@ -210,10 +211,25 @@ main(int argc, char **argv)
|
|||
/* Save the original terminal settings. */
|
||||
if (tcgetattr(0, &orig_term) < 0)
|
||||
{
|
||||
printf("%s: tcgetattr: %s\n", progname, strerror(errno));
|
||||
return 1;
|
||||
if (errno == ENOTTY)
|
||||
{
|
||||
memset(&orig_term, 0, sizeof(struct termios));
|
||||
dont_have_tty = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s: tcgetattr: %s\n", progname,
|
||||
strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (dont_have_tty && mode != 'n')
|
||||
{
|
||||
printf("%s: Attaching to a session requires a terminal.\n",
|
||||
progname);
|
||||
return 1;
|
||||
}
|
||||
if (mode == 'a')
|
||||
{
|
||||
if (argc > 0)
|
||||
|
|
|
|||
5
master.c
5
master.c
|
|
@ -114,7 +114,10 @@ init_pty(char **argv)
|
|||
memset(&the_pty.ws, 0, sizeof(struct winsize));
|
||||
|
||||
/* Create the pty process */
|
||||
the_pty.pid = forkpty(&the_pty.fd, NULL, &the_pty.term, NULL);
|
||||
if (!dont_have_tty)
|
||||
the_pty.pid = forkpty(&the_pty.fd, NULL, &the_pty.term, NULL);
|
||||
else
|
||||
the_pty.pid = forkpty(&the_pty.fd, NULL, NULL, NULL);
|
||||
if (the_pty.pid < 0)
|
||||
return -1;
|
||||
else if (the_pty.pid == 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue