summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-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 15f258b..6513fd3 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
OpenPOWER on IntegriCloud