diff options
Diffstat (limited to 'gdb/mi')
-rw-r--r-- | gdb/mi/mi-main.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 213f97a..c798c90 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -1107,23 +1107,37 @@ captured_mi_execute_command (struct ui_out *uiout, void *data) /* Call the "console" interpreter. */ argv[0] = "console"; argv[1] = context->command; - mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2); + args->rc = mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2); - /* If we changed interpreters, DON'T print out anything. */ + /* If we changed interpreters, DON'T print out anything. */ if (current_interp_named_p (INTERP_MI) || current_interp_named_p (INTERP_MI1) || current_interp_named_p (INTERP_MI2) || current_interp_named_p (INTERP_MI3)) { - /* print the result */ - /* FIXME: Check for errors here. */ - fputs_unfiltered (context->token, raw_stdout); - fputs_unfiltered ("^done", raw_stdout); - mi_out_put (uiout, raw_stdout); - mi_out_rewind (uiout); - fputs_unfiltered ("\n", raw_stdout); - args->action = EXECUTE_COMMAND_DISPLAY_PROMPT; - args->rc = MI_CMD_DONE; + if (args->rc == MI_CMD_DONE) + { + fputs_unfiltered (context->token, raw_stdout); + fputs_unfiltered ("^done", raw_stdout); + mi_out_put (uiout, raw_stdout); + mi_out_rewind (uiout); + fputs_unfiltered ("\n", raw_stdout); + args->action = EXECUTE_COMMAND_DISPLAY_PROMPT; + } + else if (args->rc == MI_CMD_ERROR) + { + if (mi_error_message) + { + fputs_unfiltered (context->token, raw_stdout); + fputs_unfiltered ("^error,msg=\"", raw_stdout); + fputstr_unfiltered (mi_error_message, '"', raw_stdout); + xfree (mi_error_message); + fputs_unfiltered ("\"\n", raw_stdout); + } + mi_out_rewind (uiout); + } + else + mi_out_rewind (uiout); } break; } |