ptsname_r: support ptys returned by FreeBSD posix_openpt
authorEric Blake <eblake@redhat.com>
Wed, 3 Oct 2012 14:45:59 +0000 (08:45 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 3 Oct 2012 14:45:59 +0000 (08:45 -0600)
The recent change to ptsname exposed a latent bug in our ptsname_r
implementation on FreeBSD 8.2 - there, posix_openpt returns a
device where ttyname_r already lists it as /dev/pts/0.

* lib/ptsname_r.c (__ptsname_r): Don't munge name if it already
lives in /dev/pts/.

ChangeLog
lib/ptsname_r.c

index 70fd406..a83aa5e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-03  Eric Blake  <eblake@redhat.com>
+
+       ptsname_r: support ptys returned by FreeBSD posix_openpt
+       * lib/ptsname_r.c (__ptsname_r): Don't munge name if it already
+       lives in /dev/pts/.
+
 2012-10-02  Eric Blake  <eblake@redhat.com>
 
        pselect: reject invalid file descriptors
index 140a75b..145d5b1 100644 (file)
@@ -177,7 +177,8 @@ __ptsname_r (int fd, char *buf, size_t buflen)
       return errno;
     }
 
-  buf[sizeof (_PATH_DEV) - 1] = 't';
+  if (strncmp(buf, "/dev/pts/", strlen("/dev/pts/")) != 0)
+    buf[sizeof (_PATH_DEV) - 1] = 't';
 #endif
 
   if (__stat (buf, &st) < 0)