diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2025-04-15 10:36:51 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2025-04-15 10:36:51 -0400 |
commit | 0885d1e2839bb5a74fcec2107c9d1f061cb9c4a9 (patch) | |
tree | fb2b043b2ad955f6f0ee8e33ff346afec1000a0e | |
parent | 99ee1a95551cd869c56f5ee0a07047a35e8900d6 (diff) | |
download | bfs-0885d1e2839bb5a74fcec2107c9d1f061cb9c4a9.tar.xz |
bfstd: Add a tcsetwinsize() polyfill
-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> /** |