This fixes a bug relating to the invocation of ttyname_r. I've reported it as glibc bug <http://sourceware.org/bugzilla/show_bug.cgi?id=11538>.
2010-04-25 Bruno Haible <br...@clisp.org> ptsname: Fix misuse of ttyname_r. * lib/ptsname.c (__ptsname_r): Use __ttyname_r's return value instead of errno. --- lib/ptsname.c.orig Sun Apr 25 22:17:33 2010 +++ lib/ptsname.c Sun Apr 25 22:16:53 2010 @@ -63,6 +63,7 @@ __ptsname_r (int fd, char *buf, size_t buflen) { int save_errno = errno; + int err; struct stat st; if (buf == NULL) @@ -81,8 +82,12 @@ return ERANGE; } - if (__ttyname_r (fd, buf, buflen) != 0) - return errno; + err = __ttyname_r (fd, buf, buflen); + if (err != 0) + { + __set_errno (err); + return errno; + } buf[sizeof (_PATH_DEV) - 1] = 't';