X-Git-Url: http://git.squeep.com/?p=dcpu16;a=blobdiff_plain;f=vm-dcpu16.c;h=537452af9af8f11066f00dd43aa0eb33961eb00d;hp=d60c340d2eeaa7a6f4eb4e9630127ae1152bd439;hb=286b0e08bf52ee3eda3d8f73366a786337a7a4bd;hpb=244481c68cb54e08e38b8b85a4371a2f5dbbef69 diff --git a/vm-dcpu16.c b/vm-dcpu16.c index d60c340..537452a 100644 --- a/vm-dcpu16.c +++ b/vm-dcpu16.c @@ -2,6 +2,8 @@ #include #include #include +#include +#include #include #include #include @@ -326,14 +328,17 @@ COMMAND_HELP(step) { COMMAND_IMPL(run) { - sig_t osig; + struct sigaction act; (void)arg_count, (void)arg_vector; running_ = 1; - /* install our new interrupt signal handler */ - if ( (osig = signal(SIGINT, sigint_handler_)) == SIG_ERR ) { - fprintf(stderr, "%s():%s\n", "signal", strerror(errno)); + memset(&act, 0, sizeof act); + act.sa_handler = sigint_handler_; + act.sa_flags = SA_RESETHAND; + + if (sigaction(SIGINT, &act, NULL)) { + fprintf(stderr, "%s():%s\n", "sigaction", strerror(errno)); return -1; } @@ -347,12 +352,6 @@ COMMAND_IMPL(run) { } } - /* restore the old interrupt signal handler */ - if (signal(SIGINT, osig) == SIG_ERR) { - fprintf(stderr, "%s():%s\n", "signal", strerror(errno)); - return -1; - } - printf("interrupted...\n"); return 0;