Index: gdb/tui/tui-io.c |
diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c |
index 2fb7bb436c338e4832f2756b72702ca2e7850cf6..19b02916b5a11a3c40995a5092f4101a4a5b22ab 100644 |
--- a/gdb/tui/tui-io.c |
+++ b/gdb/tui/tui-io.c |
@@ -1,6 +1,6 @@ |
/* TUI support I/O functions. |
- Copyright (C) 1998-2004, 2007-2012 Free Software Foundation, Inc. |
+ Copyright (C) 1998-2013 Free Software Foundation, Inc. |
Contributed by Hewlett-Packard Company. |
@@ -37,6 +37,7 @@ |
#include <fcntl.h> |
#include <signal.h> |
#include <stdio.h> |
+#include "filestuff.h" |
#include "gdb_curses.h" |
@@ -211,8 +212,11 @@ tui_redisplay_readline (void) |
/* Detect when we temporarily left SingleKey and now the readline |
edit buffer is empty, automatically restore the SingleKey |
- mode. */ |
- if (tui_current_key_mode == TUI_ONE_COMMAND_MODE && rl_end == 0) |
+ mode. The restore must only be done if the command has finished. |
+ The command could call prompt_for_continue and we must not |
+ restore SingleKey so that the prompt and normal keymap are used. */ |
+ if (tui_current_key_mode == TUI_ONE_COMMAND_MODE && rl_end == 0 |
+ && immediate_quit == 0) |
tui_set_key_mode (TUI_SINGLE_KEY_MODE); |
if (tui_current_key_mode == TUI_SINGLE_KEY_MODE) |
@@ -416,7 +420,8 @@ tui_rl_display_match_list (char **matches, int len, int max) |
{ |
char msg[256]; |
- sprintf (msg, "\nDisplay all %d possibilities? (y or n)", len); |
+ xsnprintf (msg, sizeof (msg), |
+ "\nDisplay all %d possibilities? (y or n)", len); |
tui_puts (msg); |
if (get_y_or_n () == 0) |
{ |
@@ -604,15 +609,14 @@ tui_initialize_io (void) |
tui_stderr = tui_fileopen (stderr); |
tui_out = tui_out_new (tui_stdout); |
- /* Create the default UI. It is not created because we installed a |
- deprecated_init_ui_hook. */ |
+ /* Create the default UI. */ |
tui_old_uiout = cli_out_new (gdb_stdout); |
#ifdef TUI_USE_PIPE_FOR_READLINE |
/* Temporary solution for readline writing to stdout: redirect |
readline output in a pipe, read that pipe and output the content |
in the curses command window. */ |
- if (pipe (tui_readline_pipe) != 0) |
+ if (gdb_pipe_cloexec (tui_readline_pipe) != 0) |
{ |
fprintf_unfiltered (gdb_stderr, "Cannot create pipe for readline"); |
exit (1); |