aboutsummaryrefslogtreecommitdiff
path: root/libbb/platform.c
diff options
context:
space:
mode:
authorMatt Whitlock <busybox@mattwhitlock.name>2015-04-25 21:32:48 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2015-04-25 21:32:48 +0200
commitcee59053dcf47b4a3ab87f7654c1ed20620def16 (patch)
treed14818d1f81743b8849f84aa8c2fc4f01fa13e20 /libbb/platform.c
parentde5edadee2dca2896492f97ab3a56e389305e74d (diff)
downloadbusybox-cee59053dcf47b4a3ab87f7654c1ed20620def16.tar.gz
Bionic lacks ttyname_r; provide a workaround
Signed-off-by: Matt Whitlock <busybox@mattwhitlock.name> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/platform.c')
-rw-r--r--libbb/platform.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libbb/platform.c b/libbb/platform.c
index 8d90ca4e9..03bbb798b 100644
--- a/libbb/platform.c
+++ b/libbb/platform.c
@@ -194,3 +194,22 @@ ssize_t FAST_FUNC getline(char **lineptr, size_t *n, FILE *stream)
return len;
}
#endif
+
+#ifndef HAVE_TTYNAME_R
+int ttyname_r(int fd, char *buf, size_t buflen)
+{
+ int r;
+ char path[sizeof("/proc/self/fd/%d") + sizeof(int)*3];
+
+ if (!isatty(fd))
+ return errno == EINVAL ? ENOTTY : errno;
+ sprintf(path, "/proc/self/fd/%d", fd);
+ r = readlink(path, buf, buflen);
+ if (r < 0)
+ return errno;
+ if (r >= buflen)
+ return ERANGE;
+ buf[r] = '\0';
+ return 0;
+}
+#endif