diff options
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/guile/scm-ports.c | 10 | ||||
-rw-r--r-- | gdb/top.c | 20 | ||||
-rw-r--r-- | gdb/utils.c | 29 | ||||
-rw-r--r-- | gdb/utils.h | 3 |
5 files changed, 23 insertions, 48 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b6290c7..9d0d536 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,14 @@ 2016-10-21 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-21 Tom Tromey <tom@tromey.com> + * common/scoped_restore.h: New file. * utils.h: Include scoped_restore.h. * top.c (execute_command_to_string): Use scoped_restore. 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 @@ -706,22 +706,22 @@ 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 71c0e00..e552685 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 *); |