| #include <unistd.h> | |
| #include <errno.h> | |
| void __procfdname(char *, unsigned); | |
| int ttyname_r(int fd, char *name, size_t size) | |
| { | |
| char procname[sizeof "/proc/self/fd/" + 3*sizeof(int) + 2]; | |
| ssize_t l; | |
| if (!isatty(fd)) return ENOTTY; | |
| __procfdname(procname, fd); | |
| l = readlink(procname, name, size); | |
| if (l < 0) return errno; | |
| else if (l == size) return ERANGE; | |
| else { | |
| name[l] = 0; | |
| return 0; | |
| } | |
| } |