aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran/io/unix.c')
-rw-r--r--libgfortran/io/unix.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 950b7a2..004e860 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -1811,18 +1811,29 @@ stream_isatty (stream *s)
return isatty (((unix_stream *) s)->fd);
}
-char *
-#ifdef HAVE_TTYNAME
-stream_ttyname (stream *s)
-{
- return ttyname (((unix_stream *) s)->fd);
-}
+int
+stream_ttyname (stream *s __attribute__ ((unused)),
+ char * buf __attribute__ ((unused)),
+ size_t buflen __attribute__ ((unused)))
+{
+#ifdef HAVE_TTYNAME_R
+ return ttyname_r (((unix_stream *) s)->fd, buf, buflen);
+#elif defined HAVE_TTYNAME
+ char *p;
+ size_t plen;
+ p = ttyname (((unix_stream *) s)->fd);
+ if (!p)
+ return errno;
+ plen = strlen (p);
+ if (buflen < plen)
+ plen = buflen;
+ memcpy (buf, p, plen);
+ return 0;
#else
-stream_ttyname (stream *s __attribute__ ((unused)))
-{
- return NULL;
-}
+ return ENOSYS;
#endif
+}
+