summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/stdio/__fdopen.c5
-rw-r--r--src/stdio/__stdout_write.c5
-rw-r--r--src/unistd/isatty.c7
3 files changed, 8 insertions, 9 deletions
diff --git a/src/stdio/__fdopen.c b/src/stdio/__fdopen.c
index a6ae73a2..ef8f47dc 100644
--- a/src/stdio/__fdopen.c
+++ b/src/stdio/__fdopen.c
@@ -1,6 +1,5 @@
#include "stdio_impl.h"
#include <stdlib.h>
-#include <termios.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
@@ -9,7 +8,7 @@
FILE *__fdopen(int fd, const char *mode)
{
FILE *f;
- struct termios tio;
+ struct winsize wsz;
/* Check for valid initial mode character */
if (!strchr("rwa", *mode)) {
@@ -43,7 +42,7 @@ FILE *__fdopen(int fd, const char *mode)
/* Activate line buffered mode for terminals */
f->lbf = EOF;
- if (!(f->flags & F_NOWR) && !__syscall(SYS_ioctl, fd, TCGETS, &tio))
+ if (!(f->flags & F_NOWR) && !__syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz))
f->lbf = '\n';
/* Initialize op ptrs. No problem if some are unneeded. */
diff --git a/src/stdio/__stdout_write.c b/src/stdio/__stdout_write.c
index 200fe2c9..dd1ec60f 100644
--- a/src/stdio/__stdout_write.c
+++ b/src/stdio/__stdout_write.c
@@ -1,12 +1,11 @@
#include "stdio_impl.h"
-#include <termios.h>
#include <sys/ioctl.h>
size_t __stdout_write(FILE *f, const unsigned char *buf, size_t len)
{
- struct termios tio;
+ struct winsize wsz;
f->write = __stdio_write;
- if (!(f->flags & F_SVB) && __syscall(SYS_ioctl, f->fd, TCGETS, &tio))
+ if (!(f->flags & F_SVB) && __syscall(SYS_ioctl, f->fd, TIOCGWINSZ, &wsz))
f->lbf = -1;
return __stdio_write(f, buf, len);
}
diff --git a/src/unistd/isatty.c b/src/unistd/isatty.c
index cff6e9fe..c8badaf5 100644
--- a/src/unistd/isatty.c
+++ b/src/unistd/isatty.c
@@ -1,8 +1,9 @@
#include <unistd.h>
-#include <termios.h>
+#include <sys/ioctl.h>
+#include "syscall.h"
int isatty(int fd)
{
- struct termios t;
- return tcgetattr(fd, &t) == 0;
+ struct winsize wsz;
+ return !__syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz);
}