From: Rich Felker Date: Mon, 12 Jan 2015 05:59:49 +0000 (-0500) Subject: simplify ctermid X-Git-Tag: v1.1.6~3 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9772eadba8f8b32a1744c4df5048d70c567f6082;p=oweals%2Fmusl.git 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. --- 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"; }