diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2015-11-12 18:51:15 -0500 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2015-12-05 18:09:53 +1000 |
commit | c74495a3b217249e3a14d616b38367b6dbb006e4 (patch) | |
tree | 3b3d86f79fbd70d7d511193dd453fa02512a2b0b /src | |
parent | 4d2317dafb3c3aac56f9f604262d82fd1b396a19 (diff) | |
download | pacman-c74495a3b217249e3a14d616b38367b6dbb006e4.tar.xz |
extract SIGWINCH handler
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/pacman/pacman.c | 5 | ||||
-rw-r--r-- | src/pacman/sighandler.c | 21 | ||||
-rw-r--r-- | src/pacman/sighandler.h | 1 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 0f115c25..e1f90398 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -1107,9 +1107,12 @@ int main(int argc, char *argv[]) cleanup(1); } - /* disable progressbar if the output is redirected */ if(!isatty(fileno(stdout))) { + /* disable progressbar if the output is redirected */ config->noprogressbar = 1; + } else { + /* install signal handler to update output width */ + install_winch_handler(); } /* Priority of options: diff --git a/src/pacman/sighandler.c b/src/pacman/sighandler.c index d488ecec..76f7e9d2 100644 --- a/src/pacman/sighandler.c +++ b/src/pacman/sighandler.c @@ -61,9 +61,6 @@ 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 */ alpm_unlock(config->handle); @@ -72,11 +69,27 @@ static void handler(int signum) _Exit(128 + signum); } +static void winch_handler(int signum) +{ + (void)signum; /* suppress unused variable warnings */ + columns_cache_reset(); +} + +void install_winch_handler(void) +{ + struct sigaction new_action; + new_action.sa_handler = winch_handler; + sigemptyset(&new_action.sa_mask); + new_action.sa_flags = SA_RESTART; + sigaction(SIGWINCH, &new_action, NULL); +} + void install_signal_handlers(void) { struct sigaction new_action; - const int signals[] = { SIGHUP, SIGINT, SIGSEGV, SIGWINCH }; + const int signals[] = { SIGHUP, SIGINT, SIGSEGV }; size_t i; + /* Set signal handlers */ /* Set up the structure to specify the new action. */ new_action.sa_handler = handler; diff --git a/src/pacman/sighandler.h b/src/pacman/sighandler.h index f7abc9ee..bcf7d88a 100644 --- a/src/pacman/sighandler.h +++ b/src/pacman/sighandler.h @@ -20,6 +20,7 @@ #ifndef _PM_SIGHANDLER_H #define _PM_SIGHANDLER_H +void install_winch_handler(void); void install_signal_handlers(void); #endif /* _PM_SIGHANDLER_H */ |