From 4abab5ad6c8465a7528ccdd5f49367da05f78bbd Mon Sep 17 00:00:00 2001 From: Vladimir Azarov Date: Tue, 1 Oct 2024 15:47:05 +0200 Subject: Initial version --- src/unistd/ttyname_r.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/unistd/ttyname_r.c (limited to 'src/unistd/ttyname_r.c') diff --git a/src/unistd/ttyname_r.c b/src/unistd/ttyname_r.c new file mode 100644 index 0000000..82acb75 --- /dev/null +++ b/src/unistd/ttyname_r.c @@ -0,0 +1,28 @@ +#include +#include +#include +#include "syscall.h" + +int ttyname_r(int fd, char *name, size_t size) +{ + struct stat st1, st2; + char procname[sizeof "/proc/self/fd/" + 3*sizeof(int) + 2]; + ssize_t l; + + if (!isatty(fd)) return errno; + + __procfdname(procname, fd); + l = readlink(procname, name, size); + + if (l < 0) return errno; + else if (l == size) return ERANGE; + + name[l] = 0; + + if (stat(name, &st1) || fstat(fd, &st2)) + return errno; + if (st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino) + return ENODEV; + + return 0; +} -- cgit v1.2.3