terminals right. Irritatingly this was working when run from another
[xsp]term but not when run from my GNOME panel. I think it's now
more robust.
git-svn-id: svn://svn.tartarus.org/sgt/putty@2041
cda61777-01e9-0310-a592-
d414129be87e
{
int slavefd;
char name[FILENAME_MAX];
{
int slavefd;
char name[FILENAME_MAX];
pty_master_fd = open("/dev/ptmx", O_RDWR);
pty_master_fd = open("/dev/ptmx", O_RDWR);
name[FILENAME_MAX-1] = '\0';
strncpy(name, ptsname(pty_master_fd), FILENAME_MAX-1);
name[FILENAME_MAX-1] = '\0';
strncpy(name, ptsname(pty_master_fd), FILENAME_MAX-1);
- slavefd = open(name, O_RDWR);
- if (slavefd < 0) {
- perror("slave pty: open");
- exit(1);
- }
-
/*
* Fork and execute the command.
*/
/*
* Fork and execute the command.
*/
/*
* We are the child.
*/
/*
* We are the child.
*/
+
+ slavefd = open(name, O_RDWR);
+ if (slavefd < 0) {
+ perror("slave pty: open");
+ exit(1);
+ }
+
close(pty_master_fd);
close(0);
close(1);
close(pty_master_fd);
close(0);
close(1);
dup2(slavefd, 1);
dup2(slavefd, 2);
setsid();
dup2(slavefd, 1);
dup2(slavefd, 2);
setsid();
+ ioctl(slavefd, TIOCSCTTY, 1);
+ pgrp = getpid();
+ tcsetpgrp(slavefd, pgrp);
+ setpgrp();
+ close(open(name, O_WRONLY, 0));
- tcsetpgrp(slavefd, getpgrp());
/* Close everything _else_, for tidiness. */
for (i = 3; i < 1024; i++)
close(i);
/* Close everything _else_, for tidiness. */
for (i = 3; i < 1024; i++)
close(i);