add tcgetwinsize and tcsetwinsize functions, move struct winsize
authorRich Felker <dalias@aerifal.cx>
Mon, 24 Aug 2020 16:29:30 +0000 (12:29 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 25 Aug 2020 01:31:18 +0000 (21:31 -0400)
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
include/termios.h
src/stdio/__fdopen.c
src/stdio/__stdout_write.c
src/termios/tcgetwinsize.c [new file with mode: 0644]
src/termios/tcsetwinsize.c [new file with mode: 0644]
src/unistd/isatty.c

index c2ce3b4..d6a7d47 100644 (file)
@@ -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
index d73c780..793cfc9 100644 (file)
@@ -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 <bits/termios.h>
@@ -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);
index 116e78e..616f4f9 100644 (file)
@@ -1,6 +1,7 @@
 #include "stdio_impl.h"
 #include <stdlib.h>
 #include <sys/ioctl.h>
+#include <termios.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <string.h>
index dd1ec60..5b413c7 100644 (file)
@@ -1,5 +1,6 @@
 #include "stdio_impl.h"
 #include <sys/ioctl.h>
+#include <termios.h>
 
 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 (file)
index 0000000..9b3a65a
--- /dev/null
@@ -0,0 +1,8 @@
+#include <termios.h>
+#include <sys/ioctl.h>
+#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 (file)
index 0000000..e01d0e2
--- /dev/null
@@ -0,0 +1,8 @@
+#include <termios.h>
+#include <sys/ioctl.h>
+#include "syscall.h"
+
+int tcsetwinsize(int fd, const struct winsize *wsz)
+{
+       return syscall(SYS_ioctl, fd, TIOCSWINSZ, wsz);
+}
index 75a9c18..bc220c0 100644 (file)
@@ -1,6 +1,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <sys/ioctl.h>
+#include <termios.h>
 #include "syscall.h"
 
 int isatty(int fd)