From 357b9a24a96478b7bcaaea8633f8f6a519f8903c Mon Sep 17 00:00:00 2001 From: Dave Reisner Date: Sat, 21 Jun 2014 08:44:01 -0400 Subject: cache terminal size, add SIGWINCH handler to reset Refactoring getcols, yet again. We do the following: 1) Introduce a static global in src/pacman/util.c 2) getcols always prefers this cached value, but will derive it from the COLUMNS environment var, the characteristics of stdout, or a sane default (in that order). 3) Introduce a SIGWINCH signal handler to reset the cached value, meaning we only call ioctl when we don't know the value. On my machine, pacman -Syy goes from ~4300 ioctl calls to 3. --- src/pacman/pacman.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/pacman/pacman.c') diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index baa0485b..12a4f7a3 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -312,6 +312,9 @@ static void handler(int signum) /* a transaction is being interrupted, don't exit pacman yet. */ return; } + } else if(signum == SIGWINCH) { + columns_cache_reset(); + return; } /* SIGINT/SIGHUP: no committing transaction, release it now and then exit pacman * SIGTERM: release no matter what */ @@ -1019,7 +1022,7 @@ int main(int argc, char *argv[]) int ret = 0; size_t i; struct sigaction new_action, old_action; - const int signals[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV }; + const int signals[] = { SIGHUP, SIGINT, SIGTERM, SIGSEGV, SIGWINCH }; uid_t myuid = getuid(); /* Set signal handlers */ -- cgit v1.2.3-54-g00ecf