[RFA,v2,02/17] Use scoped_restore for ui_file
Commit Message
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
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
>>>>> "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
@@ -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.
@@ -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
@@ -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);
@@ -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
@@ -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 *);