From 9772eadba8f8b32a1744c4df5048d70c567f6082 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 12 Jan 2015 00:59:49 -0500 Subject: [PATCH] simplify ctermid opening /dev/tty then using ttyname_r on it does not produce a canonical terminal name; it simply yields "/dev/tty". it would be possible to make ctermid determine the actual controlling terminal device via field 7 of /proc/self/stat, but doing so would introduce a buffer overflow into applications built with L_ctermid==9, which glibc defines, adversely affecting the quality of ABI compat. --- src/unistd/ctermid.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/unistd/ctermid.c b/src/unistd/ctermid.c index 77684050..1612770a 100644 --- a/src/unistd/ctermid.c +++ b/src/unistd/ctermid.c @@ -1,19 +1,7 @@ #include -#include -#include -#include -#include "syscall.h" +#include char *ctermid(char *s) { - static char s2[L_ctermid]; - int fd; - if (!s) s = s2; - *s = 0; - fd = open("/dev/tty", O_WRONLY | O_NOCTTY | O_CLOEXEC); - if (fd >= 0) { - ttyname_r(fd, s, L_ctermid); - __syscall(SYS_close, fd); - } - return s; + return s ? strcpy(s, "/dev/tty") : "/dev/tty"; } -- 2.25.1