Don't make ttyname* fail if proc filesystem is not available

The ttyname and ttyname_r functions on Linux now fall back to
searching for the tty file descriptor in /dev/pts or /dev if /proc is
not available.  This allows creation of chroots without the procfs
mounted on /proc.

Fixes BZ #14516.
This commit is contained in:
Siddhesh Poyarekar 2012-08-29 10:03:39 +05:30
parent ad845c0be9
commit 050af9c4e8
4 changed files with 12 additions and 13 deletions

View file

@ -1,3 +1,10 @@
2012-08-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #14516]
* sysdeps/unix/sysv/linux/ttyname.c (ttyname): Don't return
failure if reading from procfs failed.
* sysdeps/unix/sysv/linux/ttyname_r.c (ttyname_r): Likewise.
2012-08-27 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/kernel-features.h

6
NEWS
View file

@ -12,7 +12,7 @@ Version 2.17
3479, 5400, 6778, 6808, 9685, 11607, 13717, 13696, 13939, 14042, 14090,
14166, 14150, 14151, 14154, 14157, 14166, 14173, 14195, 14252, 14283,
14298, 14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349, 14459,
14505, 14519
14505, 14516, 14519
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
Optimized versions of memcpy, memset, and memcmp added for System z10 and
@ -40,6 +40,10 @@ Version 2.17
New configure option --disable-build-nscd avoids building nscd itself;
this is the default if --disable-nscd is used.
* The ttyname and ttyname_r functions on Linux now fall back to searching for
the tty file descriptor in /dev/pts or /dev if /proc is not available. This
allows creation of chroots without the procfs mounted on /proc.
Version 2.16

View file

@ -148,12 +148,6 @@ ttyname (int fd)
}
ssize_t len = __readlink (procname, ttyname_buf, buflen);
if (__builtin_expect (len == -1 && errno == ENOENT, 0))
{
__set_errno (EBADF);
return NULL;
}
if (__builtin_expect (len != -1, 1))
{
if ((size_t) len >= buflen)

View file

@ -128,12 +128,6 @@ __ttyname_r (int fd, char *buf, size_t buflen)
*_fitoa_word (fd, __stpcpy (procname, "/proc/self/fd/"), 10, 0) = '\0';
ssize_t ret = __readlink (procname, buf, buflen - 1);
if (__builtin_expect (ret == -1 && errno == ENOENT, 0))
{
__set_errno (EBADF);
return EBADF;
}
if (__builtin_expect (ret == -1 && errno == ENAMETOOLONG, 0))
{
__set_errno (ERANGE);