#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; | |
} | |
} |