diff options
| author | Ed Schouten <ed@FreeBSD.org> | 2008-10-03 09:42:50 +0000 |
|---|---|---|
| committer | Ed Schouten <ed@FreeBSD.org> | 2008-10-03 09:42:50 +0000 |
| commit | 8d333b3c8511941762d2e8cc38457d6ed58c5be7 (patch) | |
| tree | 9f4d47ba2b15f33bda1aaf9a9ab914cb90ae2b08 /lib/libutil | |
| parent | 728747680a9fc0ccbb5797d80335d4297ca87dbc (diff) | |
Notes
Diffstat (limited to 'lib/libutil')
| -rw-r--r-- | lib/libutil/pty.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/lib/libutil/pty.c b/lib/libutil/pty.c index 15f258b844cd..6513fd3802b0 100644 --- a/lib/libutil/pty.c +++ b/lib/libutil/pty.c @@ -56,37 +56,26 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp, const char *slavename; int master, slave; - master = posix_openpt(O_RDWR); + master = posix_openpt(O_RDWR|O_NOCTTY); if (master == -1) return (-1); - if (grantpt(master) == -1) { - close(master); - return (-1); - } + if (grantpt(master) == -1) + goto bad; + + if (unlockpt(master) == -1) + goto bad; slavename = ptsname(master); - if (slavename == NULL) { - close(master); - return (-1); - } + if (slavename == NULL) + goto bad; - if (revoke(slavename) == -1) { - close(master); - return (-1); - } + if (revoke(slavename) == -1) + goto bad; slave = open(slavename, O_RDWR); - if (slave == -1) { - close(master); - return (-1); - } - - if (unlockpt(master) == -1) { - close(master); - close(slave); - return (-1); - } + if (slave == -1) + goto bad; *amaster = master; *aslave = slave; @@ -99,6 +88,9 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp, ioctl(slave, TIOCSWINSZ, (char *)winp); return (0); + +bad: close(master); + return (-1); } int |
