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 <stdio.h> |
||||
#include <fcntl.h> |
#include <string.h> |
||||
#include <unistd.h> |
|
||||
#include <limits.h> |
|
||||
#include "syscall.h" |
|
||||
|
|
||||
char *ctermid(char *s) |
char *ctermid(char *s) |
||||
{ |
{ |
||||
static char s2[L_ctermid]; |
return s ? strcpy(s, "/dev/tty") : "/dev/tty"; |
||||
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; |
|
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue