[RFA,v2,02/17] Use scoped_restore for ui_file

Message ID 1476393012-29987-3-git-send-email-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Oct. 13, 2016, 9:09 p.m. UTC
  This replaces all the uses of make_cleanup_restore_ui_file with
scoped_restore.

2016-09-26  Tom Tromey  <tom@tromey.com>

	* utils.c (make_cleanup_restore_ui_file, do_restore_ui_file)
	(struct restore_ui_file_closure): Remove.
	* utils.h (make_cleanup_restore_ui_file): Don't declare.
	* guile/scm-ports.c (ioscm_with_output_to_port_worker): Use
	scoped_restore.
	* top.c (execute_command_to_string): Use scoped_restore.
---
 gdb/ChangeLog         |  9 +++++++++
 gdb/guile/scm-ports.c | 10 ++++------
 gdb/top.c             | 16 ++++++----------
 gdb/utils.c           | 29 -----------------------------
 gdb/utils.h           |  3 ---
 5 files changed, 19 insertions(+), 48 deletions(-)
  

Comments

Pedro Alves Oct. 13, 2016, 10:07 p.m. UTC | #1
This is OK.  Please push.

On 10/13/2016 10:09 PM, Tom Tromey wrote:
> +  scoped_restore save_stdout = make_scoped_restore (&gdb_stdout, str_file);
> +  scoped_restore save_stderr = make_scoped_restore (&gdb_stderr, str_file);
> +  scoped_restore save_stdlog = make_scoped_restore (&gdb_stdlog, str_file);
> +  scoped_restore save_stdtarg = make_scoped_restore (&gdb_stdtarg, str_file);
> +  scoped_restore save_stdtargerr = make_scoped_restore (&gdb_stdtargerr,
> +							str_file);
>  

I wonder if aligning like:

     scoped_restore save_stdout
       = make_scoped_restore (&gdb_stdout, str_file);
     scoped_restore save_stderr
       = make_scoped_restore (&gdb_stderr, str_file);
     scoped_restore save_stdlog
       = make_scoped_restore (&gdb_stdlog, str_file);
     scoped_restore save_stdtarg
       = make_scoped_restore (&gdb_stdtarg, str_file);
     scoped_restore save_stdtargerr
       = make_scoped_restore (&gdb_stdtargerr, str_file);

would read better.  Can't tell on the mail client.
Up to you; just a thought.

Thanks,
Pedro Alves
  
Tom Tromey Oct. 14, 2016, 9:33 p.m. UTC | #2
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:

Pedro> I wonder if aligning like:
Pedro>      scoped_restore save_stdout
Pedro>        = make_scoped_restore (&gdb_stdout, str_file);
Pedro>      scoped_restore save_stderr
Pedro>        = make_scoped_restore (&gdb_stderr, str_file);
Pedro>      scoped_restore save_stdlog
Pedro>        = make_scoped_restore (&gdb_stdlog, str_file);
Pedro>      scoped_restore save_stdtarg
Pedro>        = make_scoped_restore (&gdb_stdtarg, str_file);
Pedro>      scoped_restore save_stdtargerr
Pedro>        = make_scoped_restore (&gdb_stdtargerr, str_file);
Pedro> would read better.  Can't tell on the mail client.
Pedro> Up to you; just a thought.

I think so.  I went ahead and made this change.

Tom
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 775fa81..8539d0e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@ 
+2016-09-26  Tom Tromey  <tom@tromey.com>
+
+	* utils.c (make_cleanup_restore_ui_file, do_restore_ui_file)
+	(struct restore_ui_file_closure): Remove.
+	* utils.h (make_cleanup_restore_ui_file): Don't declare.
+	* guile/scm-ports.c (ioscm_with_output_to_port_worker): Use
+	scoped_restore.
+	* top.c (execute_command_to_string): Use scoped_restore.
+
 2016-10-13  Tom Tromey  <tom@tromey.com>
 
 	* common/scoped_restore.h: New file.
diff --git a/gdb/guile/scm-ports.c b/gdb/guile/scm-ports.c
index 5559475..dea9077 100644
--- a/gdb/guile/scm-ports.c
+++ b/gdb/guile/scm-ports.c
@@ -524,15 +524,13 @@  ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport,
 
   make_cleanup_ui_file_delete (port_file);
 
+  scoped_restore save_file = make_scoped_restore (oport == GDB_STDERR
+						  ? &gdb_stderr : &gdb_stdout);
+
   if (oport == GDB_STDERR)
-    {
-      make_cleanup_restore_ui_file (&gdb_stderr);
-      gdb_stderr = port_file;
-    }
+    gdb_stderr = port_file;
   else
     {
-      make_cleanup_restore_ui_file (&gdb_stdout);
-
       if (ui_out_redirect (current_uiout, port_file) < 0)
 	warning (_("Current output protocol does not support redirection"));
       else
diff --git a/gdb/top.c b/gdb/top.c
index ce41bc9..f6176ae 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -705,22 +705,18 @@  execute_command_to_string (char *p, int from_tty)
   str_file = mem_fileopen ();
 
   make_cleanup_ui_file_delete (str_file);
-  make_cleanup_restore_ui_file (&gdb_stdout);
-  make_cleanup_restore_ui_file (&gdb_stderr);
-  make_cleanup_restore_ui_file (&gdb_stdlog);
-  make_cleanup_restore_ui_file (&gdb_stdtarg);
-  make_cleanup_restore_ui_file (&gdb_stdtargerr);
 
   if (ui_out_redirect (current_uiout, str_file) < 0)
     warning (_("Current output protocol does not support redirection"));
   else
     make_cleanup_ui_out_redirect_pop (current_uiout);
 
-  gdb_stdout = str_file;
-  gdb_stderr = str_file;
-  gdb_stdlog = str_file;
-  gdb_stdtarg = str_file;
-  gdb_stdtargerr = str_file;
+  scoped_restore save_stdout = make_scoped_restore (&gdb_stdout, str_file);
+  scoped_restore save_stderr = make_scoped_restore (&gdb_stderr, str_file);
+  scoped_restore save_stdlog = make_scoped_restore (&gdb_stdlog, str_file);
+  scoped_restore save_stdtarg = make_scoped_restore (&gdb_stdtarg, str_file);
+  scoped_restore save_stdtargerr = make_scoped_restore (&gdb_stdtargerr,
+							str_file);
 
   execute_command (p, from_tty);
 
diff --git a/gdb/utils.c b/gdb/utils.c
index 6feeb4d..e50177d 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -319,35 +319,6 @@  make_cleanup_htab_delete (htab_t htab)
   return make_cleanup (do_htab_delete_cleanup, htab);
 }
 
-struct restore_ui_file_closure
-{
-  struct ui_file **variable;
-  struct ui_file *value;
-};
-
-static void
-do_restore_ui_file (void *p)
-{
-  struct restore_ui_file_closure *closure
-    = (struct restore_ui_file_closure *) p;
-
-  *(closure->variable) = closure->value;
-}
-
-/* Remember the current value of *VARIABLE and make it restored when
-   the cleanup is run.  */
-
-struct cleanup *
-make_cleanup_restore_ui_file (struct ui_file **variable)
-{
-  struct restore_ui_file_closure *c = XNEW (struct restore_ui_file_closure);
-
-  c->variable = variable;
-  c->value = *variable;
-
-  return make_cleanup_dtor (do_restore_ui_file, (void *) c, xfree);
-}
-
 /* Helper for make_cleanup_value_free_to_mark.  */
 
 static void
diff --git a/gdb/utils.h b/gdb/utils.h
index c4944e1..36f5294 100644
--- a/gdb/utils.h
+++ b/gdb/utils.h
@@ -91,9 +91,6 @@  extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable);
 struct target_ops;
 extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
 
-extern struct cleanup *
-  make_cleanup_restore_ui_file (struct ui_file **variable);
-
 extern struct cleanup *make_cleanup_value_free_to_mark (struct value *);
 extern struct cleanup *make_cleanup_value_free (struct value *);