diff options
author | David Terei <davidterei@gmail.com> | 2011-07-20 11:09:03 -0700 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2011-07-20 11:26:35 -0700 |
commit | 16514f272fb42af6e9c7674a9bd6c9dce369231f (patch) | |
tree | e4f332b45fe65e2a7a2451be5674f887b42bf199 /testsuite/tests/rts/exec_signals_child.c | |
parent | ebd422aed41048476aa61dd4c520d43becd78682 (diff) | |
download | haskell-16514f272fb42af6e9c7674a9bd6c9dce369231f.tar.gz |
Move tests from tests/ghc-regress/* to just tests/*
Diffstat (limited to 'testsuite/tests/rts/exec_signals_child.c')
-rw-r--r-- | testsuite/tests/rts/exec_signals_child.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/testsuite/tests/rts/exec_signals_child.c b/testsuite/tests/rts/exec_signals_child.c new file mode 100644 index 0000000000..4b84008928 --- /dev/null +++ b/testsuite/tests/rts/exec_signals_child.c @@ -0,0 +1,47 @@ +#include <signal.h> +#include <stdio.h> +#include <errno.h> + +// Prints the state of the signal handlers to stdout +int main() +{ + int open = 0, i; + sigset_t blockedsigs; + + printf("ChildInfo { masked = ["); + + sigprocmask(SIG_BLOCK, NULL, &blockedsigs); + for(i = 0; i < NSIG; ++i) + { + int ret = sigismember(&blockedsigs, i); + if(ret >= 0) + { + if(!open) + open=1; + else + printf(","); + printf("(%d,%s)", i, ret == 1 ? "True" : "False"); + } + } + printf("], handlers = ["); + + open = 0; + for(i = 0; i < NSIG; ++i) + { + struct sigaction old; + if(sigaction(i, NULL, &old) >= 0) + { + if(!open) + open=1; + else + printf(","); + + printf("(%d,%s)", i, + old.sa_handler == SIG_IGN ? "Ignored" : + (old.sa_handler == SIG_DFL ? "Default" : "Handled")); + } + } + printf("]}"); + + return 0; +} |