This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] cli-out.c new function
Elena Zannoni writes:
> >
> > See the following threads:
> > [RFC/RFA] avoid spurious Watchpoint X output on cygwin native target.
> > http://sources.redhat.com/ml/gdb-patches/2002-07/msg00323.html
> >
> > and
> > RFA: Make cli-out follow gdb_stdout
> > http://sources.redhat.com/ml/gdb-patches/2002-07/msg00366.html
> > as well as
> > (which is a different thread, probably because I didn't use Relpy...)
> > http://sources.redhat.com/ml/gdb-patches/2002-08/msg00549.html
> >
> > But honestly, I don't know if the this new function solves the
> > problem...
>
> Ulgh, we seem to have hit a wall. I see that the same concerns about
> your solutions apply to this one. I guess that in my case using
> catch_exception should work, because the current code does this:
>
> old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
> result = safe_execute_command (cli_uiout, command_str, 1);
> cli_out_set_stream (cli_uiout, old_stream);
>
> I could change that into a catch_exceptions call. In fact,
> safe_execute_command *IS* a wrapper around catch_exceptions already.
>
> The general problem is not solved, however.
>
> Elena
OK, I think I figured out how to solve the problem in my case.
BTW, is there a cli_out_free kind of function?
Elena
Index: cli-interp.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/Attic/cli-interp.c,v
retrieving revision 1.1.2.10
diff -u -p -r1.1.2.10 cli-interp.c
--- cli-interp.c 4 Nov 2002 23:27:31 -0000 1.1.2.10
+++ cli-interp.c 6 Nov 2002 19:10:31 -0000
@@ -39,8 +39,7 @@ static struct gdb_interpreter *cli_inter
/* Longjmp-safe wrapper for "execute_command" */
static int do_captured_execute_command (struct ui_out *uiout, void *data);
-static enum gdb_rc safe_execute_command (struct ui_out *uiout, char *command,
- int from_tty);
+static enum gdb_rc safe_execute_command (char *command, int from_tty);
struct captured_execute_command_args
{
char *command;
@@ -83,19 +82,7 @@ cli_interpreter_display_prompt_p (void)
static int
cli_interpreter_exec (void *data, char *command_str)
{
- int result;
- struct ui_file *old_stream;
-
- /* gdb_stdout could change between the time cli_uiout was initialized
- and now. Since we're probably using a different interpreter which has
- a new ui_file for gdb_stdout, use that one instead of the default.
-
- It is important that it gets reset everytime, since the user could
- set gdb to use a different interpreter. */
- old_stream = cli_out_set_stream (cli_uiout, gdb_stdout);
- result = safe_execute_command (cli_uiout, command_str, 1);
- cli_out_set_stream (cli_uiout, old_stream);
- return result;
+ return safe_execute_command (command_str, 1);
}
static int
@@ -108,12 +95,20 @@ do_captured_execute_command (struct ui_o
}
static enum gdb_rc
-safe_execute_command (struct ui_out *uiout, char *command, int from_tty)
+safe_execute_command (char *command, int from_tty)
{
+ /* gdb_stdout could change between the time cli_uiout was
+ initialized and now. Since we're probably using a different
+ interpreter which has a new ui_file for gdb_stdout, use that one
+ instead of the default. Catch exception will execute with
+ command_uiout as output stream. It is important that it gets
+ reset everytime, since the user could set gdb to use a different
+ interpreter. */
+ struct ui_out *command_uiout = cli_out_new (gdb_stdout);
struct captured_execute_command_args args;
args.command = command;
args.from_tty = from_tty;
- return catch_exceptions (uiout, do_captured_execute_command, &args,
+ return catch_exceptions (command_uiout, do_captured_execute_command, &args,
NULL, RETURN_MASK_ALL);
}