X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fmain.c;h=edc59eddaf6a8440bde2daa940dffe1411324bc8;hb=b1b43c0d6a64d29a13953aa15d98dd74117faa95;hp=e19dd0c7a5eac5239aa9161a2f9380387d29fd7a;hpb=81fff61a96bece351e381ad3fef8ab1248a952ba;p=pspp diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index e19dd0c7a5..edc59eddaf 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -62,7 +62,6 @@ static void i18n_init (void); static void fpu_init (void); -static int execute_command (void); static void terminate (bool success) NO_RETURN; /* If a segfault happens, issue a message to that effect and halt */ @@ -76,6 +75,7 @@ void interrupt_handler(int sig); int main (int argc, char **argv) { + signal (SIGABRT, bug_handler); signal (SIGSEGV, bug_handler); signal (SIGFPE, bug_handler); signal (SIGINT, interrupt_handler); @@ -102,7 +102,8 @@ main (int argc, char **argv) for (;;) { - int result = execute_command (); + int result = cmd_parse (proc_has_source () + ? CMD_STATE_DATA : CMD_STATE_INITIAL); if (result == CMD_EOF || result == CMD_FINISH) break; if (result == CMD_CASCADING_FAILURE && !getl_is_interactive ()) @@ -118,25 +119,6 @@ main (int argc, char **argv) terminate (!any_errors ()); } - -/* Parses a command and returns the result. */ -static int -execute_command (void) -{ - /* Read the command's first token. - The first token is part of the first line of the command. */ - getl_set_prompt_style (GETL_PROMPT_FIRST); - lex_get (); - if (token == T_STOP) - return CMD_EOF; - - /* Parse the command. - Any lines read after the first token must be continuation - lines. */ - getl_set_prompt_style (GETL_PROMPT_LATER); - return cmd_parse (proc_has_source () - ? CMD_STATE_DATA : CMD_STATE_INITIAL); -} static void i18n_init (void) @@ -168,15 +150,14 @@ bug_handler(int sig) { switch (sig) { + case SIGABRT: + request_bug_report_and_abort("Assertion Failure/Abort"); 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; + request_bug_report_and_abort("Unknown"); } }