Fix a controlling-terminal bug reported by Anthony Heading: Cygwin

doesn't have TIOCSCTTY, so my attempt to set the ctty of the child
process isn't doing anything, and only works by chance when you run
bash because bash does the thing that _will_ set the ctty, namely
opening the terminal file again without O_NOCTTY. So now we do that
too.

[originally from svn r9638]
This commit is contained in:
Simon Tatham 2012-08-28 17:42:47 +00:00
Родитель 03ebc74b9f
Коммит ddfca43402
1 изменённых файлов: 15 добавлений и 1 удалений

Просмотреть файл

@ -122,9 +122,23 @@ int run_program_in_pty(const struct shell_data *shdata,
close(fd);
}
#endif
/*
* Make the new pty our controlling terminal. On some OSes
* this is done with TIOCSCTTY; Cygwin doesn't have that, so
* instead it's done by simply opening the pty without
* O_NOCTTY. This code is primarily intended for Cygwin, but
* it's useful to have it work in other contexts for testing
* purposes, so I leave the TIOCSCTTY here anyway.
*/
if ((fd = open(ptyname, O_RDWR)) >= 0) {
#ifdef TIOCSCTTY
ioctl(0, TIOCSCTTY, &i);
ioctl(fd, TIOCSCTTY, &i);
#endif
close(fd);
} else {
perror("slave pty: open");
exit(127);
}
tcsetpgrp(0, getpgrp());
for (i = 0; i < shdata->nenvvars; i++)