diff options
author | jhb <jhb@FreeBSD.org> | 2007-11-12 20:02:21 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2007-11-12 20:02:21 +0000 |
commit | ae69575f80d2706e656f987f88f184f30aa5022e (patch) | |
tree | a658e77dca52f1e0e063068647a50ee8b39ae282 | |
parent | c03314c6c390d490c0ad8c52c1367d681446c4c2 (diff) | |
download | FreeBSD-src-ae69575f80d2706e656f987f88f184f30aa5022e.zip FreeBSD-src-ae69575f80d2706e656f987f88f184f30aa5022e.tar.gz |
write(1) needs to strip off the leading /dev/ from the tty name for the
current tty as returned from ttyname(3) so it can try to avoid writing to
the current tty if possible. Previously, it did this by trimming off any
leading directory (effectively performing a basename(3) on the path
returned from ttyname(3)). However, this chopped off too much of the path
for ttys who have directories in their name such as pts(4). Instead, just
strip off the leading /dev/ from the path returned by ttyname(3). This
fixes write(1) when using pts(4).
MFC after: 1 week
Reported by: rwatson
-rw-r--r-- | usr.bin/write/write.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/usr.bin/write/write.c b/usr.bin/write/write.c index b0e0a1f..878c8c1 100644 --- a/usr.bin/write/write.c +++ b/usr.bin/write/write.c @@ -76,7 +76,6 @@ int utmp_chk(char *, char *); int main(int argc, char **argv) { - char *cp; time_t atime; uid_t myuid; int msgsok, myttyfd; @@ -100,8 +99,8 @@ main(int argc, char **argv) errx(1, "can't find your tty"); if (!(mytty = ttyname(myttyfd))) errx(1, "can't find your tty's name"); - if ((cp = rindex(mytty, '/'))) - mytty = cp + 1; + if (!strncmp(mytty, _PATH_DEV, strlen(_PATH_DEV))) + mytty += strlen(_PATH_DEV); if (term_chk(mytty, &msgsok, &atime, 1)) exit(1); if (!msgsok) |