From 4d5786544bb52c62fc1ae84d91684ef2268afa05 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 24 Aug 2020 12:29:30 -0400 Subject: add tcgetwinsize and tcsetwinsize functions, move struct winsize these have been adopted for future issue of POSIX as the outcome of Austin Group issue 1151, and are simply functions performing the roles of the historical ioctls. since struct winsize is being standardized along with them, its definition is moved to the appropriate header. there is some chance this will break source files that expect struct winsize to be defined by sys/ioctl.h without including termios.h. if this happens, further changes will be needed to have sys/ioctl.h expose it too. --- include/sys/ioctl.h | 7 ------- include/termios.h | 10 ++++++++++ src/stdio/__fdopen.c | 1 + src/stdio/__stdout_write.c | 1 + src/termios/tcgetwinsize.c | 8 ++++++++ src/termios/tcsetwinsize.c | 8 ++++++++ src/unistd/isatty.c | 1 + 7 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 src/termios/tcgetwinsize.c create mode 100644 src/termios/tcsetwinsize.c diff --git a/include/sys/ioctl.h b/include/sys/ioctl.h index c2ce3b48..d6a7d474 100644 --- a/include/sys/ioctl.h +++ b/include/sys/ioctl.h @@ -47,13 +47,6 @@ extern "C" { #define TIOCSER_TEMT 1 -struct winsize { - unsigned short ws_row; - unsigned short ws_col; - unsigned short ws_xpixel; - unsigned short ws_ypixel; -}; - #define SIOCADDRT 0x890B #define SIOCDELRT 0x890C #define SIOCRTMSG 0x890D diff --git a/include/termios.h b/include/termios.h index d73c780d..793cfc94 100644 --- a/include/termios.h +++ b/include/termios.h @@ -15,6 +15,13 @@ typedef unsigned char cc_t; typedef unsigned int speed_t; typedef unsigned int tcflag_t; +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + #define NCCS 32 #include @@ -27,6 +34,9 @@ int cfsetispeed (struct termios *, speed_t); int tcgetattr (int, struct termios *); int tcsetattr (int, int, const struct termios *); +int tcgetwinsize (int, struct winsize *); +int tcsetwinsize (int, const struct winsize *); + int tcsendbreak (int, int); int tcdrain (int); int tcflush (int, int); diff --git a/src/stdio/__fdopen.c b/src/stdio/__fdopen.c index 116e78e5..616f4f99 100644 --- a/src/stdio/__fdopen.c +++ b/src/stdio/__fdopen.c @@ -1,6 +1,7 @@ #include "stdio_impl.h" #include #include +#include #include #include #include diff --git a/src/stdio/__stdout_write.c b/src/stdio/__stdout_write.c index dd1ec60f..5b413c79 100644 --- a/src/stdio/__stdout_write.c +++ b/src/stdio/__stdout_write.c @@ -1,5 +1,6 @@ #include "stdio_impl.h" #include +#include size_t __stdout_write(FILE *f, const unsigned char *buf, size_t len) { diff --git a/src/termios/tcgetwinsize.c b/src/termios/tcgetwinsize.c new file mode 100644 index 00000000..9b3a65a4 --- /dev/null +++ b/src/termios/tcgetwinsize.c @@ -0,0 +1,8 @@ +#include +#include +#include "syscall.h" + +int tcgetwinsize(int fd, struct winsize *wsz) +{ + return syscall(SYS_ioctl, fd, TIOCGWINSZ, wsz); +} diff --git a/src/termios/tcsetwinsize.c b/src/termios/tcsetwinsize.c new file mode 100644 index 00000000..e01d0e25 --- /dev/null +++ b/src/termios/tcsetwinsize.c @@ -0,0 +1,8 @@ +#include +#include +#include "syscall.h" + +int tcsetwinsize(int fd, const struct winsize *wsz) +{ + return syscall(SYS_ioctl, fd, TIOCSWINSZ, wsz); +} diff --git a/src/unistd/isatty.c b/src/unistd/isatty.c index 75a9c186..bc220c00 100644 --- a/src/unistd/isatty.c +++ b/src/unistd/isatty.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "syscall.h" int isatty(int fd) -- cgit v1.2.1