X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmain.c;h=c5f9c34f4478f743a06f6cb983194b6be8dd7034;hb=3bd4593ef9a57f23062c61ec465389f749ba3089;hp=b4aa243518f7851e3adbf496ebe51059ef730a74;hpb=b321086267ad1014dc5d09886396cde30f094437;p=pspp-builds.git diff --git a/src/main.c b/src/main.c index b4aa2435..c5f9c34f 100644 --- a/src/main.c +++ b/src/main.c @@ -54,16 +54,26 @@ char curdate[12]; /* If a segfault happens, issue a message to that effect and halt */ void bug_handler(int sig); +/* Handle quit/term/int signals */ +void interrupt_handler(int sig); + /* Whether we're dropping down to interactive mode immediately because we hit end-of-file unexpectedly (or whatever). */ int start_interactive; + + + + /* Program entry point. */ int main (int argc, char **argv) { + signal (SIGSEGV, bug_handler); + signal (SIGFPE, bug_handler); + signal (SIGINT, interrupt_handler); gsl_set_error_handler_off(); @@ -185,5 +195,23 @@ handle_error (int code) void bug_handler(int sig UNUSED) { - request_bug_report_and_abort("Segmentation Violation"); + switch (sig) + { + case SIGFPE: + request_bug_report_and_abort("Floating Point Exception"); + break; + case SIGSEGV: + request_bug_report_and_abort("Segmentation Violation"); + break; + default: + request_bug_report_and_abort(""); + break; + } +} + + +void +interrupt_handler(int sig UNUSED) +{ + err_hcf(0); }