mirror of
git://git.musl-libc.org/musl
synced 2024-12-16 03:35:06 +00:00
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.
This commit is contained in:
parent
699d4532f6
commit
9772eadba8
@ -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
Block a user