From df6eed7a02f63ba08879450c3d4199141bb7bed3 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Fri, 3 Jan 2025 09:35:48 +0800 Subject: [PATCH] TerminalSize (Linux): enable fast path when stdout is redirected. --- src/detection/terminalsize/terminalsize_linux.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/detection/terminalsize/terminalsize_linux.c b/src/detection/terminalsize/terminalsize_linux.c index 70c29d558..cb6880f8d 100644 --- a/src/detection/terminalsize/terminalsize_linux.c +++ b/src/detection/terminalsize/terminalsize_linux.c @@ -2,6 +2,7 @@ #include "common/io/io.h" #include +#include #include #ifdef __sun @@ -11,7 +12,11 @@ bool ffDetectTerminalSize(FFTerminalSizeResult* result) { struct winsize winsize = {}; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &winsize); + static int ttyfd = STDOUT_FILENO; + if (!isatty(ttyfd)) + ttyfd = open("/dev/tty", O_RDWR | O_NOCTTY | O_CLOEXEC); + + ioctl(ttyfd, TIOCGWINSZ, &winsize); if (winsize.ws_row == 0 || winsize.ws_col == 0) ffGetTerminalResponse("\e[18t", 2, "\e[8;%hu;%hut", &winsize.ws_row, &winsize.ws_col);