patch signal handlers for catpoint - catpoint - Catpoint simple presenting software. HTML git clone git://bitreich.org/catpoint/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/catpoint/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 62d8733dfbae0ee35a6d71a77409e8bc33f2b8f8 DIR parent 05fee79d9bfcc4029064723a9739dbeedf8fb788 HTML Author: KatolaZ <katolaz@freaknet.org> Date: Sun, 8 Jul 2018 14:54:37 +0200 patch signal handlers for catpoint As subject says. Avoid to garble the terminal on an exit due to signal. Quite straightforward ;) HND KatolaZ -- [ ~.,_ Enzo Nicosia aka KatolaZ - Devuan -- Freaknet Medialab ] [ "+. katolaz [at] freaknet.org --- katolaz [at] yahoo.it ] [ @) http://kalos.mine.nu --- Devuan GNU + Linux User ] [ @@) http://maths.qmul.ac.uk/~vnicosia -- GPG: 0B5F062F ] [ (@@@) Twitter: @KatolaZ - skype: katolaz -- github: KatolaZ ] Signed-off-by: Christoph Lohmann <20h@r-36.net> Diffstat: M catpoint.c | 37 ++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) --- DIR diff --git a/catpoint.c b/catpoint.c @@ -10,21 +10,51 @@ #include <stdlib.h> #include <unistd.h> #include <locale.h> +#include <signal.h> + +char **p; /* the slides */ +int n; /* the number of slides */ + +void +cleanup(int s) +{ + int i; + for (i = 0; i<n; i++) + munmap(p[i], 0x1000); + + endwin(); /* restore terminal */ + exit(1); +} + + +void +setsignal() +{ + signal(SIGHUP, cleanup); + signal(SIGINT, cleanup); + signal(SIGINT, cleanup); + signal(SIGQUIT, cleanup); + signal(SIGABRT, cleanup); + signal(SIGKILL, cleanup); + signal(SIGTERM, cleanup); +} + int main(int argc, char *argv[]) { int c, i, fd; - char **p; /* the slides */ if (argc == 1) errx(1, "usage: %s file ...", argv[0]); argv++; argc--; + setsignal(); setlocale(LC_ALL, ""); p = calloc(argc, sizeof(char *)); + n = argc; /* map files to mem */ for (i = 0; argv[i] != NULL; i++) { @@ -102,10 +132,7 @@ again: } /* unmap mem */ - for (i = 0; argv[i] != NULL; i++) - munmap(p[i], 0x1000); - - endwin(); /* restore terminal */ + cleanup(0); return (0); }