Commit 594e2edf authored by Antonio Gutierrez's avatar Antonio Gutierrez Committed by Benjamin Peterson

closes bpo-36161: Use thread-safe ttyname_r instead of ttyname. (GH-14868)

Signed-off-by: default avatarAntonio Gutierrez <chibby0ne@gmail.com>
parent e8bedbdd
In :mod:`posix`, use ``ttyname_r`` instead of ``ttyname`` for thread safety.
......@@ -2774,13 +2774,24 @@ static PyObject *
os_ttyname_impl(PyObject *module, int fd)
/*[clinic end generated code: output=c424d2e9d1cd636a input=9ff5a58b08115c55]*/
{
char *ret;
ret = ttyname(fd);
if (ret == NULL) {
long size = sysconf(_SC_TTY_NAME_MAX);
if (size == -1) {
return posix_error();
}
char *buffer = (char *)PyMem_RawMalloc(size);
if (buffer == NULL) {
return PyErr_NoMemory();
}
int ret = ttyname_r(fd, buffer, size);
if (ret != 0) {
PyMem_RawFree(buffer);
errno = ret;
return posix_error();
}
return PyUnicode_DecodeFSDefault(ret);
PyObject *res = PyUnicode_DecodeFSDefault(buffer);
PyMem_RawFree(buffer);
return res;
}
#endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment