From: Andrew STUBBS <andrew.stubbs@st.com>
To: Mark Kettenis <mark.kettenis@xs4all.nl>,
gdb-patches@sourceware.org, insight@sourceware.org
Subject: Re: [PATCH] Don't call Insight hooks when not appropriate
Date: Wed, 29 Mar 2006 15:43:00 -0000 [thread overview]
Message-ID: <442AAA5F.1010004@st.com> (raw)
In-Reply-To: <20060328215858.GC10392@nevyn.them.org>
[-- Attachment #1: Type: text/plain, Size: 888 bytes --]
Daniel Jacobowitz wrote:
>> I haven't actually tested it, but shouldn't gdbtk_readline() and
>> gdbtk_query() return values? In particular, gdbtk_query() should return
>> 1 (yes) as the default answer, just as query() does in utils.c.
>
> You're right; my patch won't work. How about this one instead? Make
> input_from_terminal_p do something sensible for Insight.
I'm a little confused now. I assume you meant to retain the cli-script.c
and top.h patches from your previous posting, but, even so, your patch
doesn't even attempt to tackle the problems with query() and
read_command_lines().
I think you are getting at the attached patch. I have tested this and it
does what I want it to. It produces no extra failures in the test suite.
I'm still a little concerned that input_from_terminal_p no longer seems
to take 'caution' into account. Is that deliberate?
Andrew Stubbs
[-- Attachment #2: insight-dialogue-2.patch --]
[-- Type: text/plain, Size: 5946 bytes --]
2006-03-29 Daniel Jacobowitz <dan@codesourcery.com>
Andrew Stubbs <andrew.stubbs@st.com>
* top.h: Declare in_user_command variable.
* cli/cli-script.c (do_restore_user_call_depth): Unset in_user_command.
(execute_user_command): Only set old_chain once.
Set in_user_command.
Decrement user_call_depth on return.
(read_command_lines): Use input_from_terminal_p() to guard the
deprecated_readline_begin_hook() call in addition to the non-hook.
* top.c (in_user_command): New global variable.
(command_line_input): use only input_from_terminal_p() to determine
interactive state.
(input_from_terminal_p): Take in_user_command into account.
* utils.c (query): Move automatic 'yes' test before
deprecated_query_hook() call.
Index: src/gdb/cli/cli-script.c
===================================================================
--- src.orig/gdb/cli/cli-script.c 2006-03-27 13:55:48.000000000 +0100
+++ src/gdb/cli/cli-script.c 2006-03-29 11:25:52.000000000 +0100
@@ -241,9 +241,9 @@ static void
do_restore_user_call_depth (void * call_depth)
{
int * depth = call_depth;
- /* We will be returning_to_top_level() at this point, so we want to
- reset our depth. */
- (*depth) = 0;
+ (*depth)--;
+ if ((*depth) == 0)
+ in_user_command = 0;
}
@@ -266,12 +266,17 @@ execute_user_command (struct cmd_list_el
if (++user_call_depth > max_user_call_depth)
error (_("Max user call depth exceeded -- command aborted."));
- old_chain = make_cleanup (do_restore_user_call_depth, &user_call_depth);
+ make_cleanup (do_restore_user_call_depth, &user_call_depth);
/* Set the instream to 0, indicating execution of a
user-defined function. */
- old_chain = make_cleanup (do_restore_instream_cleanup, instream);
+ make_cleanup (do_restore_instream_cleanup, instream);
instream = (FILE *) 0;
+
+ /* Also set the global in_user_command, so that NULL instream is
+ not confused with Insight. */
+ in_user_command = 1;
+
while (cmdlines)
{
ret = execute_control_command (cmdlines);
@@ -283,8 +288,6 @@ execute_user_command (struct cmd_list_el
cmdlines = cmdlines->next;
}
do_cleanups (old_chain);
-
- user_call_depth--;
}
enum command_control_type
@@ -920,15 +923,19 @@ read_command_lines (char *prompt_arg, in
enum misc_command_type val;
control_level = 0;
- if (deprecated_readline_begin_hook)
- {
- /* Note - intentional to merge messages with no newline */
- (*deprecated_readline_begin_hook) ("%s %s\n", prompt_arg, END_MESSAGE);
- }
- else if (from_tty && input_from_terminal_p ())
+ if (input_from_terminal_p ())
{
- printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
- gdb_flush (gdb_stdout);
+ if (deprecated_readline_begin_hook)
+ {
+ /* Note - intentional to merge messages with no newline */
+ (*deprecated_readline_begin_hook) ("%s %s\n", prompt_arg,
+ END_MESSAGE);
+ }
+ else if (from_tty)
+ {
+ printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
+ gdb_flush (gdb_stdout);
+ }
}
head = tail = NULL;
Index: src/gdb/top.c
===================================================================
--- src.orig/gdb/top.c 2006-02-20 18:39:55.000000000 +0000
+++ src/gdb/top.c 2006-03-29 11:22:47.000000000 +0100
@@ -112,6 +112,10 @@ Whether to confirm potentially dangerous
FILE *instream;
+/* Flag to indicate whether a user defined command is currently running. */
+
+int in_user_command;
+
/* Current working directory. */
char *current_directory;
@@ -909,11 +913,11 @@ command_line_input (char *prompt_arg, in
}
/* Don't use fancy stuff if not talking to stdin. */
- if (deprecated_readline_hook && instream == NULL)
+ if (deprecated_readline_hook && input_from_terminal_p ())
{
rl = (*deprecated_readline_hook) (local_prompt);
}
- else if (command_editing_p && instream == stdin && ISATTY (instream))
+ else if (command_editing_p && input_from_terminal_p ())
{
rl = gdb_readline_wrapper (local_prompt);
}
@@ -1197,13 +1201,22 @@ quit_force (char *args, int from_tty)
exit (exit_code);
}
-/* Returns whether GDB is running on a terminal and whether the user
- desires that questions be asked of them on that terminal. */
+/* Returns whether GDB is running on a terminal and input is
+ currently coming from that terminal. */
int
input_from_terminal_p (void)
{
- return gdb_has_a_terminal () && (instream == stdin) & caution;
+ if (gdb_has_a_terminal () && instream == stdin)
+ return 1;
+
+ /* If INSTREAM is unset, and we are not in a user command, we
+ must be in Insight. That's like having a terminal, for our
+ purposes. */
+ if (instream == NULL && !in_user_command)
+ return 1;
+
+ return 0;
}
\f
static void
Index: src/gdb/top.h
===================================================================
--- src.orig/gdb/top.h 2005-12-17 22:34:03.000000000 +0000
+++ src/gdb/top.h 2006-03-29 11:22:29.000000000 +0100
@@ -27,6 +27,7 @@
extern char *line;
extern int linesize;
extern FILE *instream;
+extern int in_user_command;
extern char gdb_dirbuf[1024];
extern int inhibit_gdbinit;
extern int epoch_interface;
Index: src/gdb/utils.c
===================================================================
--- src.orig/gdb/utils.c 2006-03-27 13:55:48.000000000 +0100
+++ src/gdb/utils.c 2006-03-29 11:26:18.000000000 +0100
@@ -1141,16 +1141,16 @@ query (const char *ctlstr, ...)
int ans2;
int retval;
+ /* Automatically answer "yes" if input is not from a terminal. */
+ if (!input_from_terminal_p ())
+ return 1;
+
if (deprecated_query_hook)
{
va_start (args, ctlstr);
return deprecated_query_hook (ctlstr, args);
}
- /* Automatically answer "yes" if input is not from a terminal. */
- if (!input_from_terminal_p ())
- return 1;
-
while (1)
{
wrap_here (""); /* Flush any buffered output */
next prev parent reply other threads:[~2006-03-29 15:43 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-09 15:42 Andrew STUBBS
2006-03-09 19:11 ` Mark Kettenis
2006-03-09 19:13 ` Daniel Jacobowitz
2006-03-09 19:14 ` Daniel Jacobowitz
2006-03-09 20:20 ` Michael Snyder
2006-03-10 11:15 ` Andrew STUBBS
2006-03-10 11:18 ` Andrew STUBBS
2006-03-25 0:04 ` Daniel Jacobowitz
2006-03-27 11:32 ` Andrew STUBBS
2006-03-28 21:59 ` Daniel Jacobowitz
2006-03-29 15:43 ` Andrew STUBBS [this message]
2006-03-29 15:49 ` Daniel Jacobowitz
2006-03-29 15:58 ` Andrew STUBBS
2006-03-29 16:29 ` Daniel Jacobowitz
2006-03-29 16:38 ` Andrew STUBBS
2006-03-29 16:45 ` Dave Korn
2006-03-29 18:01 ` Eli Zaretskii
2006-03-29 22:53 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=442AAA5F.1010004@st.com \
--to=andrew.stubbs@st.com \
--cc=gdb-patches@sourceware.org \
--cc=insight@sourceware.org \
--cc=mark.kettenis@xs4all.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).