This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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);
 }



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]