diff options
Diffstat (limited to 'sig.c')
-rw-r--r-- | sig.c | 192 |
1 files changed, 96 insertions, 96 deletions
@@ -1,4 +1,4 @@ -/* $NetBSD: sig.c,v 1.3 1997/04/11 17:52:48 christos Exp $ */ +/* $NetBSD: sig.c,v 1.8 2001/01/09 17:31:04 jdolecek Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -36,11 +36,12 @@ * SUCH DAMAGE. */ +#include <sys/cdefs.h> #if !defined(lint) && !defined(SCCSID) #if 0 static char sccsid[] = "@(#)sig.c 8.1 (Berkeley) 6/4/93"; #else -static char rcsid[] = "$NetBSD: sig.c,v 1.3 1997/04/11 17:52:48 christos Exp $"; +__RCSID("$NetBSD: sig.c,v 1.8 2001/01/09 17:31:04 jdolecek Exp $"); #endif #endif /* not lint && not SCCSID */ @@ -55,14 +56,14 @@ static char rcsid[] = "$NetBSD: sig.c,v 1.3 1997/04/11 17:52:48 christos Exp $"; private EditLine *sel = NULL; -private int sighdl[] = { -#define _DO(a) (a), - ALLSIGS -#undef _DO - -1 +private const int sighdl[] = { +#define _DO(a) (a), + ALLSIGS +#undef _DO + - 1 }; -private void sig_handler __P((int)); +private void sig_handler(int); /* sig_handler(): * This is the handler called for all signals @@ -70,40 +71,39 @@ private void sig_handler __P((int)); * state in a private variable */ private void -sig_handler(signo) - int signo; +sig_handler(int signo) { - int i; - sigset_t nset, oset; - - (void) sigemptyset(&nset); - (void) sigaddset(&nset, signo); - (void) sigprocmask(SIG_BLOCK, &nset, &oset); - - switch (signo) { - case SIGCONT: - tty_rawmode(sel); - if (ed_redisplay(sel, 0) == CC_REFRESH) - re_refresh(sel); - term__flush(); - break; - - case SIGWINCH: - el_resize(sel); - break; - - default: - tty_cookedmode(sel); - break; - } - - for (i = 0; sighdl[i] != -1; i++) - if (signo == sighdl[i]) - break; - - (void) signal(signo, sel->el_signal[i]); - (void) sigprocmask(SIG_SETMASK, &oset, NULL); - (void) kill(0, signo); + int i; + sigset_t nset, oset; + + (void) sigemptyset(&nset); + (void) sigaddset(&nset, signo); + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + switch (signo) { + case SIGCONT: + tty_rawmode(sel); + if (ed_redisplay(sel, 0) == CC_REFRESH) + re_refresh(sel); + term__flush(); + break; + + case SIGWINCH: + el_resize(sel); + break; + + default: + tty_cookedmode(sel); + break; + } + + for (i = 0; sighdl[i] != -1; i++) + if (signo == sighdl[i]) + break; + + (void) signal(signo, sel->el_signal[i]); + (void) sigprocmask(SIG_SETMASK, &oset, NULL); + (void) kill(0, signo); } @@ -111,27 +111,28 @@ sig_handler(signo) * Initialize all signal stuff */ protected int -sig_init(el) - EditLine *el; +sig_init(EditLine *el) { - int i; - sigset_t nset, oset; + int i; + sigset_t nset, oset; - (void) sigemptyset(&nset); -#define _DO(a) (void) sigaddset(&nset, SIGWINCH); - ALLSIGS -#undef _DO - (void) sigprocmask(SIG_BLOCK, &nset, &oset); + (void) sigemptyset(&nset); +#define _DO(a) (void) sigaddset(&nset, a); + ALLSIGS +#undef _DO + (void) sigprocmask(SIG_BLOCK, &nset, &oset); -#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(sig_t)) +#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(sig_t)) - el->el_signal = (sig_t *) el_malloc(SIGSIZE); - for (i = 0; sighdl[i] != -1; i++) - el->el_signal[i] = SIG_ERR; + el->el_signal = (sig_t *) el_malloc(SIGSIZE); + if (el->el_signal == NULL) + return (-1); + for (i = 0; sighdl[i] != -1; i++) + el->el_signal[i] = SIG_ERR; - (void) sigprocmask(SIG_SETMASK, &oset, NULL); + (void) sigprocmask(SIG_SETMASK, &oset, NULL); - return 0; + return (0); } @@ -139,11 +140,11 @@ sig_init(el) * Clear all signal stuff */ protected void -sig_end(el) - EditLine *el; +sig_end(EditLine *el) { - el_free((ptr_t) el->el_signal); - el->el_signal = NULL; + + el_free((ptr_t) el->el_signal); + el->el_signal = NULL; } @@ -151,26 +152,25 @@ sig_end(el) * set all the signal handlers */ protected void -sig_set(el) - EditLine *el; +sig_set(EditLine *el) { - int i; - sigset_t nset, oset; - - (void) sigemptyset(&nset); -#define _DO(a) (void) sigaddset(&nset, SIGWINCH); - ALLSIGS -#undef _DO - (void) sigprocmask(SIG_BLOCK, &nset, &oset); - - for (i = 0; sighdl[i] != -1; i++) { - sig_t s; - /* This could happen if we get interrupted */ - if ((s = signal(sighdl[i], sig_handler)) != sig_handler) - el->el_signal[i] = s; - } - sel = el; - (void) sigprocmask(SIG_SETMASK, &oset, NULL); + int i; + sigset_t nset, oset; + + (void) sigemptyset(&nset); +#define _DO(a) (void) sigaddset(&nset, a); + ALLSIGS +#undef _DO + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + for (i = 0; sighdl[i] != -1; i++) { + sig_t s; + /* This could happen if we get interrupted */ + if ((s = signal(sighdl[i], sig_handler)) != sig_handler) + el->el_signal[i] = s; + } + sel = el; + (void) sigprocmask(SIG_SETMASK, &oset, NULL); } @@ -178,22 +178,22 @@ sig_set(el) * clear all the signal handlers */ protected void -sig_clr(el) - EditLine *el; +sig_clr(EditLine *el) { - int i; - sigset_t nset, oset; - - (void) sigemptyset(&nset); -#define _DO(a) (void) sigaddset(&nset, SIGWINCH); - ALLSIGS -#undef _DO - (void) sigprocmask(SIG_BLOCK, &nset, &oset); - - for (i = 0; sighdl[i] != -1; i++) - if (el->el_signal[i] != SIG_ERR) - (void) signal(sighdl[i], el->el_signal[i]); - - sel = NULL; /* we are going to die if the handler is called */ - (void) sigprocmask(SIG_SETMASK, &oset, NULL); + int i; + sigset_t nset, oset; + + (void) sigemptyset(&nset); +#define _DO(a) (void) sigaddset(&nset, a); + ALLSIGS +#undef _DO + (void) sigprocmask(SIG_BLOCK, &nset, &oset); + + for (i = 0; sighdl[i] != -1; i++) + if (el->el_signal[i] != SIG_ERR) + (void) signal(sighdl[i], el->el_signal[i]); + + sel = NULL; /* we are going to die if the handler is + * called */ + (void) sigprocmask(SIG_SETMASK, &oset, NULL); } |