From b4f5539f0460e420dddade172f3d17c91470d254 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 24 Jul 2002 17:58:46 +0000 Subject: [PATCH 1/1] * defs.h (gdb_readline_wrapper): Declare. * utils.c (prompt_for_continue): Use gdb_readline_wrapper. * tracepoint.c (read_actions): Use gdb_readline_wrapper. * top.c (gdb_readline_wrapper): New function. (command_line_input): Use it. --- gdb/ChangeLog | 8 ++++++++ gdb/defs.h | 2 ++ gdb/top.c | 25 ++++++++++++++++++++++++- gdb/tracepoint.c | 2 +- gdb/utils.c | 2 +- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a3bdf19627..3b2b94e944 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2002-07-24 Tom Tromey + + * defs.h (gdb_readline_wrapper): Declare. + * utils.c (prompt_for_continue): Use gdb_readline_wrapper. + * tracepoint.c (read_actions): Use gdb_readline_wrapper. + * top.c (gdb_readline_wrapper): New function. + (command_line_input): Use it. + 2002-07-24 Andrew Cagney * regcache.h (regcache_raw_read, regcache_raw_write): Replace diff --git a/gdb/defs.h b/gdb/defs.h index 94a1ac8042..7dea2b7339 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -535,6 +535,8 @@ extern char *skip_quoted (char *); extern char *gdb_readline (char *); +extern char *gdb_readline_wrapper (char *); + extern char *command_line_input (char *, int, char *); extern void print_prompt (void); diff --git a/gdb/top.c b/gdb/top.c index 10afc64037..ee3daf0678 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -947,6 +947,29 @@ static int write_history_p; static int history_size; static char *history_filename; +/* This is like readline(), but it has some gdb-specific behavior. + gdb can use readline in both the synchronous and async modes during + a single gdb invocation. At the ordinary top-level prompt we might + be using the async readline. That means we can't use + rl_pre_input_hook, since it doesn't work properly in async mode. + However, for a secondary prompt (" >", such as occurs during a + `define'), gdb just calls readline() directly, running it in + synchronous mode. So for operate-and-get-next to work in this + situation, we have to switch the hooks around. That is what + gdb_readline_wrapper is for. */ +char * +gdb_readline_wrapper (char *prompt) +{ + /* Set the hook that works in this case. */ + if (event_loop_p && after_char_processing_hook) + { + rl_pre_input_hook = (Function *) after_char_processing_hook; + after_char_processing_hook = NULL; + } + + return readline (prompt); +} + #ifdef STOP_SIGNAL static void @@ -1174,7 +1197,7 @@ command_line_input (char *prompt_arg, int repeat, char *annotation_suffix) } else if (command_editing_p && instream == stdin && ISATTY (instream)) { - rl = readline (local_prompt); + rl = gdb_readline_wrapper (local_prompt); } else { diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 19f290656e..976f9259cd 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -854,7 +854,7 @@ read_actions (struct tracepoint *t) line = (*readline_hook) (prompt); else if (instream == stdin && ISATTY (instream)) { - line = readline (prompt); + line = gdb_readline_wrapper (prompt); if (line && *line) /* add it to command history */ add_history (line); } diff --git a/gdb/utils.c b/gdb/utils.c index 4baea62426..b2d9ecafdb 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1603,7 +1603,7 @@ prompt_for_continue (void) /* Call readline, not gdb_readline, because GO32 readline handles control-C whereas control-C to gdb_readline will cause the user to get dumped out to DOS. */ - ignore = readline (cont_prompt); + ignore = gdb_readline_wrapper (cont_prompt); if (annotation_level > 1) printf_unfiltered ("\n\032\032post-prompt-for-continue\n"); -- 2.34.1