Index: fusl/src/unistd/ttyname_r.c |
diff --git a/fusl/src/unistd/ttyname_r.c b/fusl/src/unistd/ttyname_r.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8bac7b2f3ab10cb0929341ca1425af65c8d409bf |
--- /dev/null |
+++ b/fusl/src/unistd/ttyname_r.c |
@@ -0,0 +1,22 @@ |
+#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; |
+ } |
+} |