diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2013-12-12 23:12:21 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2013-12-12 23:12:21 -0800 |
commit | f3b0217d7a5d9d050f0781defa5339ef29a00c1c (patch) | |
tree | 12748e3e9e7b065d7c1b4a20d0371978e8c02991 | |
parent | b3f8bee89e3fa5713ff391e0172b8e1d4b92be25 (diff) | |
download | txr-f3b0217d7a5d9d050f0781defa5339ef29a00c1c.tar.gz txr-f3b0217d7a5d9d050f0781defa5339ef29a00c1c.tar.bz2 txr-f3b0217d7a5d9d050f0781defa5339ef29a00c1c.zip |
* eval.c (eval_init): Registered vars for signal numbers.
* signal.c (sig_hup, sig_int, sig_quit, sig_ill, sig_trap, sig_abrt,
sig_bus, val sig_fpe, sig_kill, sig_usr1, sig_segv, sig_usr2, sig_pipe,
sig_alrm, val sig_term, sig_chld, sig_cont, sig_stop, sig_tstp,
sig_ttin, val sig_ttou, sig_urg, sig_xcpu, sig_xfsz, sigtalrm,
sig_prof, val sig_poll, sig_sys, sig_winch, sig_iot, sig_stkflt,
sig_io, sig_lost, sig_pwr): New variables.
(sig_init): New variables initialized.
* signal.h: New variables declared.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | eval.c | 46 | ||||
-rw-r--r-- | signal.c | 54 | ||||
-rw-r--r-- | signal.h | 7 |
4 files changed, 121 insertions, 0 deletions
@@ -1,5 +1,19 @@ 2013-12-12 Kaz Kylheku <kaz@kylheku.com> + * eval.c (eval_init): Registered vars for signal numbers. + + * signal.c (sig_hup, sig_int, sig_quit, sig_ill, sig_trap, sig_abrt, + sig_bus, val sig_fpe, sig_kill, sig_usr1, sig_segv, sig_usr2, sig_pipe, + sig_alrm, val sig_term, sig_chld, sig_cont, sig_stop, sig_tstp, + sig_ttin, val sig_ttou, sig_urg, sig_xcpu, sig_xfsz, sigtalrm, + sig_prof, val sig_poll, sig_sys, sig_winch, sig_iot, sig_stkflt, + sig_io, sig_lost, sig_pwr): New variables. + (sig_init): New variables initialized. + + * signal.h: New variables declared. + +2013-12-12 Kaz Kylheku <kaz@kylheku.com> + First cut at signal handling support. * Makefile (OBJS-y): Include signal.o if have_posix_sigs is "y". @@ -2648,6 +2648,52 @@ void eval_init(void) reg_fun(intern(lit("set-sig-handler"), user_package), func_n2(set_sig_handler)); reg_fun(intern(lit("get-sig-handler"), user_package), func_n1(get_sig_handler)); reg_fun(intern(lit("sig-check"), user_package), func_n0(sig_check)); + reg_var(intern(lit("sig-hup"), user_package), &sig_hup); + reg_var(intern(lit("sig-int"), user_package), &sig_int); + reg_var(intern(lit("sig-quit"), user_package), &sig_quit); + reg_var(intern(lit("sig-ill"), user_package), &sig_ill); + reg_var(intern(lit("sig-trap"), user_package), &sig_trap); + reg_var(intern(lit("sig-abrt"), user_package), &sig_abrt); + reg_var(intern(lit("sig-bus"), user_package), &sig_bus); + reg_var(intern(lit("sig-fpe"), user_package), &sig_fpe); + reg_var(intern(lit("sig-kill"), user_package), &sig_kill); + reg_var(intern(lit("sig-usr1"), user_package), &sig_usr1); + reg_var(intern(lit("sig-segv"), user_package), &sig_segv); + reg_var(intern(lit("sig-usr2"), user_package), &sig_usr2); + reg_var(intern(lit("sig-pipe"), user_package), &sig_pipe); + reg_var(intern(lit("sig-alrm"), user_package), &sig_alrm); + reg_var(intern(lit("sig-term"), user_package), &sig_term); + reg_var(intern(lit("sig-chld"), user_package), &sig_chld); + reg_var(intern(lit("sig-cont"), user_package), &sig_cont); + reg_var(intern(lit("sig-stop"), user_package), &sig_stop); + reg_var(intern(lit("sig-tstp"), user_package), &sig_tstp); + reg_var(intern(lit("sig-ttin"), user_package), &sig_ttin); + reg_var(intern(lit("sig-ttou"), user_package), &sig_ttou); + reg_var(intern(lit("sig-urg"), user_package), &sig_urg); + reg_var(intern(lit("sig-xcpu"), user_package), &sig_xcpu); + reg_var(intern(lit("sig-xfsz"), user_package), &sig_xfsz); + reg_var(intern(lit("sig-vtalrm"), user_package), &sigtalrm); + reg_var(intern(lit("sig-prof"), user_package), &sig_prof); + reg_var(intern(lit("sig-poll"), user_package), &sig_poll); + reg_var(intern(lit("sig-sys"), user_package), &sig_sys); +#ifdef SIGWINCH + reg_var(intern(lit("sig-winch"), user_package), &sig_winch); +#endif +#ifdef SIGIOT + reg_var(intern(lit("sig-iot"), user_package), &sig_iot); +#endif +#ifdef SIGSTKFLT + reg_var(intern(lit("sig-stkflt"), user_package), &sig_stkflt); +#endif +#ifdef SIGIO + reg_var(intern(lit("sig-io"), user_package), &sig_io); +#endif +#ifdef SIGLOST + reg_var(intern(lit("sig-lost"), user_package), &sig_lost); +#endif +#ifdef SIGPWR + reg_var(intern(lit("sig-pwr"), user_package), &sig_pwr); +#endif #endif reg_fun(intern(lit("source-loc"), user_package), func_n1(source_loc)); @@ -46,6 +46,13 @@ volatile sig_atomic_t async_sig_enabled = 0; static val sig_lambda[MAX_SIG]; volatile unsigned long sig_deferred; +val sig_hup, sig_int, sig_quit, sig_ill, sig_trap, sig_abrt, sig_bus; +val sig_fpe, sig_kill, sig_usr1, sig_segv, sig_usr2, sig_pipe, sig_alrm; +val sig_term, sig_chld, sig_cont, sig_stop, sig_tstp, sig_ttin; +val sig_ttou, sig_urg, sig_xcpu, sig_xfsz, sigtalrm, sig_prof; +val sig_poll, sig_sys, sig_winch, sig_iot, sig_stkflt; +val sig_io, sig_lost, sig_pwr; + static void sig_handler(int sig) { val lambda = sig_lambda[sig]; @@ -70,6 +77,53 @@ void sig_init(void) sig_lambda[i] = t; prot1(&sig_lambda[i]); } + + sig_hup = num_fast(SIGHUP); + sig_int = num_fast(SIGINT); + sig_quit = num_fast(SIGQUIT); + sig_ill = num_fast(SIGILL); + sig_trap = num_fast(SIGTRAP); + sig_abrt = num_fast(SIGABRT); + sig_bus = num_fast(SIGBUS); + sig_fpe = num_fast(SIGFPE); + sig_kill = num_fast(SIGKILL); + sig_usr1 = num_fast(SIGUSR1); + sig_segv = num_fast(SIGSEGV); + sig_usr2 = num_fast(SIGUSR2); + sig_pipe = num_fast(SIGPIPE); + sig_alrm = num_fast(SIGALRM); + sig_term = num_fast(SIGTERM); + sig_chld = num_fast(SIGCHLD); + sig_cont = num_fast(SIGCONT); + sig_stop = num_fast(SIGSTOP); + sig_tstp = num_fast(SIGTSTP); + sig_ttin = num_fast(SIGTTIN); + sig_ttou = num_fast(SIGTTOU); + sig_urg = num_fast(SIGURG); + sig_xcpu = num_fast(SIGXCPU); + sig_xfsz = num_fast(SIGXFSZ); + sigtalrm = num_fast(SIGVTALRM); + sig_prof = num_fast(SIGPROF); + sig_poll = num_fast(SIGPOLL); + sig_sys = num_fast(SIGSYS); +#ifdef SIGWINCH + sig_winch = num_fast(SIGWINCH); +#endif +#ifdef SIGIOT + sig_iot = num_fast(SIGIOT); +#endif +#ifdef SIGSTKFLT + sig_stkflt = num_fast(SIGSTKFLT); +#endif +#ifdef SIGIO + sig_io = num_fast(SIGIO); +#endif +#ifdef SIGLOST + sig_lost = num_fast(SIGLOST); +#endif +#ifdef SIGPWR + sig_pwr = num_fast(SIGPWR); +#endif } val set_sig_handler(val signo, val lambda) @@ -87,6 +87,13 @@ tyedef jmp_buf extended_jmp_buf; extern volatile sig_atomic_t async_sig_enabled; +extern val sig_hup, sig_int, sig_quit, sig_ill, sig_trap, sig_abrt, sig_bus; +extern val sig_fpe, sig_kill, sig_usr1, sig_segv, sig_usr2, sig_pipe, sig_alrm; +extern val sig_term, sig_chld, sig_cont, sig_stop, sig_tstp, sig_ttin; +extern val sig_ttou, sig_urg, sig_xcpu, sig_xfsz, sigtalrm, sig_prof; +extern val sig_poll, sig_sys, sig_winch, sig_iot, sig_stkflt; +extern val sig_io, sig_lost, sig_pwr; + void sig_init(void); val set_sig_handler(val signo, val lambda); val get_sig_handler(val signo); |