aboutsummaryrefslogtreecommitdiffstats
path: root/signal-reset.c
diff options
context:
space:
mode:
authorjason2018-05-11 10:40:10 -0600
committerjason2018-05-11 10:40:10 -0600
commitf1048e07d5e77f87f6e004b5a787d2bf02aa868d (patch)
treea46c0ef2ff075faf11b25482ef94e3765d92a717 /signal-reset.c
parentd0ba5c1120150b893ec51881e29b6563dde7bd8c (diff)
downloaddotfiles-f1048e07d5e77f87f6e004b5a787d2bf02aa868d.tar.gz
dotfiles-f1048e07d5e77f87f6e004b5a787d2bf02aa868d.zip
add signal-reset.c for intellij
Diffstat (limited to 'signal-reset.c')
-rw-r--r--signal-reset.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/signal-reset.c b/signal-reset.c
new file mode 100644
index 0000000..d16b942
--- /dev/null
+++ b/signal-reset.c
@@ -0,0 +1,45 @@
1// this fixes signals processing for idea
2// see https://youtrack.jetbrains.com/issue/IDEA-157989
3// signal-reset implemented by Thomas Lee https://github.com/thomaslee/signal-reset
4#include <stdio.h>
5#include <string.h>
6#include <unistd.h>
7#include <signal.h>
8
9int
10main (int argc, char **argv)
11{
12 sigset_t sigs;
13 struct sigaction sa;
14
15 sigemptyset(&sigs);
16 sigaddset(&sigs, SIGINT);
17 sigaddset(&sigs, SIGTERM);
18 if (sigprocmask(SIG_UNBLOCK, &sigs, 0) != 0) {
19 fprintf(stderr, "sigprocmask failed\n");
20 return 1;
21 }
22
23 memset(&sa, 0, sizeof(sa));
24 sa.sa_handler = SIG_DFL;
25 if (sigaction(SIGINT, &sa, 0) != 0) {
26 fprintf(stderr, "sigaction failed for SIGINT\n");
27 return 1;
28 }
29
30 memset(&sa, 0, sizeof(sa));
31 sa.sa_handler = SIG_DFL;
32 if (sigaction(SIGTERM, &sa, 0) != 0) {
33 fprintf(stderr, "sigaction failed for SIGTERM\n");
34 return 1;
35 }
36
37 if (argc <= 1) {
38 fprintf(stderr, "usage: %s <command> [args...]\n", argv[0]);
39 return 1;
40 }
41
42 execvp(argv[1], argv + 1);
43 fprintf(stderr, "execvp(...) failed\n");
44 return 1;
45}