--- libaitio/src/pty.c 2011/09/22 22:25:12 1.1.2.7 +++ libaitio/src/pty.c 2011/10/31 13:53:51 1.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: pty.c,v 1.1.2.7 2011/09/22 22:25:12 misho Exp $ +* $Id: pty.c,v 1.2 2011/10/31 13:53:51 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -76,21 +76,24 @@ ioAllocPTY(int *ptyfd, int *ttyfd, char * __restrict n } /* - * ioFreeTTY() Release PTY and TTY device - * @ptyfd = master fd, pty + * ioFreePTY() Release PTY and TTY device + * @ptyfd = master fd, pty (==-1 skip closing pty) * @ttyname = tty filename * return: none */ inline void -ioFreeTTY(int ptyfd, const char *ttyname) +ioFreePTY(int ptyfd, const char *ttyname) { assert(ttyname); if (!ttyname) return; - close(ptyfd); - chown(ttyname, (uid_t) 0, (gid_t) 0); - chmod(ttyname, (mode_t) 0666); + if (ptyfd != -1) + close(ptyfd); + if (ttyname) { + chown(ttyname, (uid_t) 0, (gid_t) 0); + chmod(ttyname, (mode_t) 0666); + } } /* @@ -312,11 +315,11 @@ ioForkPTY(int *ptyfd, char * __restrict name, int name return -1; case 0: if (ioSetOwnerTTY(name, getuid(), getgid()) == -1) { - ioFreeTTY(*ptyfd, name); + ioFreePTY(*ptyfd, name); return -1; } if (ioSetSidTTY(&ttyfd, name) == -1) { - ioFreeTTY(*ptyfd, name); + ioFreePTY(*ptyfd, name); return -1; } close(*ptyfd); @@ -325,8 +328,6 @@ ioForkPTY(int *ptyfd, char * __restrict name, int name break; default: close(ttyfd); - - ioSetRAWMode(*ptyfd, otio); /* PARENT */ break;