Solaris bits.

This commit is contained in:
Nicholas Marriott 2008-06-18 21:14:42 +00:00
parent 9b0ff4cfc0
commit 085d68bcc2

View File

@ -1,4 +1,4 @@
/* $Id: forkpty-sunos.c,v 1.2 2008-06-18 20:11:25 nicm Exp $ */ /* $Id: forkpty-sunos.c,v 1.3 2008-06-18 21:14:42 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -45,6 +45,16 @@ forkpty(int *master,
if ((slave = open(path, O_RDWR)) == -1) if ((slave = open(path, O_RDWR)) == -1)
goto out; goto out;
switch (pid = fork()) {
case -1:
goto out;
case 0:
close(*master);
setsid();
if (ioctl(slave, TIOCSCTTY, NULL) == -1)
fatal("ioctl failed");
if (ioctl(slave, I_PUSH, "ptem") == -1) if (ioctl(slave, I_PUSH, "ptem") == -1)
fatal("ioctl failed"); fatal("ioctl failed");
if (ioctl(slave, I_PUSH, "ldterm") == -1) if (ioctl(slave, I_PUSH, "ldterm") == -1)
@ -53,11 +63,11 @@ forkpty(int *master,
if (ioctl(slave, TIOCSWINSZ, ws) == -1) if (ioctl(slave, TIOCSWINSZ, ws) == -1)
fatal("ioctl failed"); fatal("ioctl failed");
switch (pid = fork()) { dup2(slave, 0);
case -1: dup2(slave, 1);
goto out; dup2(slave, 2);
case 0: if (slave > 2)
close(*master); close(slave);
return (0); return (0);
} }