diff options
-rw-r--r-- | build/has/tcsetwinsize.c | 9 | ||||
-rw-r--r-- | build/header.mk | 1 | ||||
-rw-r--r-- | src/bfstd.c | 8 | ||||
-rw-r--r-- | src/bfstd.h | 5 |
4 files changed, 23 insertions, 0 deletions
diff --git a/build/has/tcsetwinsize.c b/build/has/tcsetwinsize.c new file mode 100644 index 0000000..6717415 --- /dev/null +++ b/build/has/tcsetwinsize.c @@ -0,0 +1,9 @@ +// Copyright © Tavian Barnes <tavianator@tavianator.com> +// SPDX-License-Identifier: 0BSD + +#include <termios.h> + +int main(void) { + const struct winsize ws = {0}; + return tcsetwinsize(0, &ws); +} diff --git a/build/header.mk b/build/header.mk index 0e3af14..13672ba 100644 --- a/build/header.mk +++ b/build/header.mk @@ -56,6 +56,7 @@ HEADERS := \ gen/has/string-to-flags.h \ gen/has/strtofflags.h \ gen/has/tcgetwinsize.h \ + gen/has/tcsetwinsize.h \ gen/has/timegm.h \ gen/has/timer-create.h \ gen/has/tm-gmtoff.h \ diff --git a/src/bfstd.c b/src/bfstd.c index 64cc605..4269d55 100644 --- a/src/bfstd.c +++ b/src/bfstd.c @@ -568,6 +568,14 @@ int xtcgetwinsize(int fd, struct winsize *ws) { #endif } +int xtcsetwinsize(int fd, const struct winsize *ws) { +#if BFS_HAS_TCSETWINSIZE + return tcsetwinsize(fd, ws); +#else + return ioctl(fd, TIOCSWINSZ, ws); +#endif +} + int dup_cloexec(int fd) { #ifdef F_DUPFD_CLOEXEC return fcntl(fd, F_DUPFD_CLOEXEC, 0); diff --git a/src/bfstd.h b/src/bfstd.h index a17ce95..51920c9 100644 --- a/src/bfstd.h +++ b/src/bfstd.h @@ -350,6 +350,11 @@ int open_cterm(int flags); */ int xtcgetwinsize(int fd, struct winsize *ws); +/** + * tcsetwinsize()/ioctl(TIOCSWINSZ) wrapper. + */ +int xtcsetwinsize(int fd, const struct winsize *ws); + // #include <unistd.h> /** |