mirror of https://git.musl-libc.org/git/musl
Browse Source
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.master
1 changed files with 2 additions and 14 deletions
@ -1,19 +1,7 @@ |
|||
#include <stdio.h> |
|||
#include <fcntl.h> |
|||
#include <unistd.h> |
|||
#include <limits.h> |
|||
#include "syscall.h" |
|||
#include <string.h> |
|||
|
|||
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"; |
|||
} |
|||
|
|||
Loading…
Reference in new issue