summaryrefslogtreecommitdiff
path: root/lib/libutil
diff options
context:
space:
mode:
authorEd Schouten <ed@FreeBSD.org>2008-10-03 09:42:50 +0000
committerEd Schouten <ed@FreeBSD.org>2008-10-03 09:42:50 +0000
commit8d333b3c8511941762d2e8cc38457d6ed58c5be7 (patch)
tree9f4d47ba2b15f33bda1aaf9a9ab914cb90ae2b08 /lib/libutil
parent728747680a9fc0ccbb5797d80335d4297ca87dbc (diff)
Notes
Diffstat (limited to 'lib/libutil')
-rw-r--r--lib/libutil/pty.c38
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