mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
openpty: close slave pty fd on error
When openpty() failed only the master fd was closed so far. Let's close the slave fd as well. Also, let's unify the error handling. Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
e7a5745949
commit
98e0742024
@ -1,3 +1,7 @@
|
||||
2017-10-08 Christian Brauner <christian.brauner@ubuntu.com>
|
||||
|
||||
* login/openpty.c (openpty): Close slave pty file descriptor on error.
|
||||
|
||||
2017-10-06 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* sysdeps/ieee754/ldbl-128/s_fma.c: Include <libm-alias-double.h>.
|
||||
|
@ -92,29 +92,24 @@ openpty (int *amaster, int *aslave, char *name,
|
||||
char _buf[512];
|
||||
#endif
|
||||
char *buf = _buf;
|
||||
int master, slave;
|
||||
int master, ret = -1, slave = -1;
|
||||
|
||||
master = getpt ();
|
||||
if (master == -1)
|
||||
return -1;
|
||||
|
||||
if (grantpt (master))
|
||||
goto fail;
|
||||
goto on_error;
|
||||
|
||||
if (unlockpt (master))
|
||||
goto fail;
|
||||
goto on_error;
|
||||
|
||||
if (pts_name (master, &buf, sizeof (_buf)))
|
||||
goto fail;
|
||||
goto on_error;
|
||||
|
||||
slave = open (buf, O_RDWR | O_NOCTTY);
|
||||
if (slave == -1)
|
||||
{
|
||||
if (buf != _buf)
|
||||
free (buf);
|
||||
|
||||
goto fail;
|
||||
}
|
||||
goto on_error;
|
||||
|
||||
/* XXX Should we ignore errors here? */
|
||||
if (termp)
|
||||
@ -129,12 +124,19 @@ openpty (int *amaster, int *aslave, char *name,
|
||||
if (name != NULL)
|
||||
strcpy (name, buf);
|
||||
|
||||
ret = 0;
|
||||
|
||||
on_error:
|
||||
if (ret == -1) {
|
||||
close (master);
|
||||
|
||||
if (slave != -1)
|
||||
close (slave);
|
||||
}
|
||||
|
||||
if (buf != _buf)
|
||||
free (buf);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
close (master);
|
||||
return -1;
|
||||
return ret;
|
||||
}
|
||||
libutil_hidden_def (openpty)
|
||||
|
Loading…
Reference in New Issue
Block a user