From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 105693 invoked by alias); 16 Oct 2017 03:22:59 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 105651 invoked by uid 89); 16 Oct 2017 03:22:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=bounce, 3326, LINE, 3528 X-HELO: gproxy4-pub.mail.unifiedlayer.com Received: from gproxy4-pub.mail.unifiedlayer.com (HELO gproxy4-pub.mail.unifiedlayer.com) (69.89.23.142) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 16 Oct 2017 03:22:55 +0000 Received: from CMOut01 (unknown [10.0.90.82]) by gproxy4.mail.unifiedlayer.com (Postfix) with ESMTP id 03424175D3A for ; Sun, 15 Oct 2017 21:22:54 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by CMOut01 with id N3Nq1w00R2f2jeq013NtUq; Sun, 15 Oct 2017 21:22:53 -0600 X-Authority-Analysis: v=2.2 cv=K4VSJ2eI c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=02M-m0pO-4AA:10 a=zstS-IiYAAAA:8 a=GRSyZ3Ywl_9Q052eIa0A:9 a=kIwo4D3V5AQODAS9:21 a=CbJ8Dw_1prYOxLfH:21 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from 184-96-33-178.hlrn.qwest.net ([184.96.33.178]:40760 helo=bapiya.localdomain) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1e3vzO-003xuJ-LL; Sun, 15 Oct 2017 21:22:50 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 4/4] Constify execute_command Date: Mon, 16 Oct 2017 03:23:00 -0000 Message-Id: <20171016032239.24561-5-tom@tromey.com> In-Reply-To: <20171016032239.24561-1-tom@tromey.com> References: <20171016032239.24561-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1e3vzO-003xuJ-LL X-Source-Sender: 184-96-33-178.hlrn.qwest.net (bapiya.localdomain) [184.96.33.178]:40760 X-Source-Auth: tom+tromey.com X-Email-Count: 13 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== X-Local-Domain: yes X-SW-Source: 2017-10/txt/msg00415.txt.bz2 This constifies execute_command and fixes up the callers. 2017-10-15 Tom Tromey * event-top.h (command_handler): Constify. * record-full.c (cmd_record_full_start): Update. * thread.c (thread_apply_all_command): Update. * printcmd.c (eval_command): Update. * mi/mi-main.c (mi_execute_cli_command): Update. (mi_execute_async_cli_command): Update. * tui/tui-stack.c (tui_update_command): Update. * cli/cli-interp.c (safe_execute_command): Constify. * record.c (record_start): Update. (record_start, record_stop, cmd_record_start): Update. * record-btrace.c (cmd_record_btrace_bts_start): Update. (cmd_record_btrace_pt_start): Update. (cmd_record_btrace_start): Update. (cmd_record_btrace_start): Update. * reverse.c (exec_reverse_once): Update. * python/python.c (execute_gdb_command): Don't copy the command. * event-top.c (command_line_handler): Update. (command_handler): Constify. * defs.h (deprecated_call_command_hook): Constify. * cli/cli-script.h (execute_user_command): Constify. * cli/cli-script.c (execute_user_command): Constify. (execute_cmd_pre_hook, execute_cmd_post_hook): Constify. (enum command_control_type): Update. * main.c (catch_command_errors): Remove non-const overload. (catch_command_errors_ftype): Remove. * python/py-cmd.c (cmdpy_function): Constify. * guile/scm-cmd.c (cmdscm_function): Constify. * cli/cli-dump.c (call_dump_func): Constify. * cli/cli-decode.c (do_const_cfunc): Constify. (do_sfunc): Constify. (cmd_func): Constify. * gdbcmd.h (execute_command, execute_command_to_string): Constify. * top.h (execute_command): Constify. * top.c (execute_command): Constify. (execute_command_to_string): Constify. (deprecated_call_command_hook): Constify. * command.h (cmd_func): Constify. * cli/cli-decode.h (struct cmd_list_element) : Constify. --- gdb/ChangeLog | 41 +++++++++++++++++++++++++++++++++++++++++ gdb/cli/cli-decode.c | 6 +++--- gdb/cli/cli-decode.h | 2 +- gdb/cli/cli-dump.c | 2 +- gdb/cli/cli-interp.c | 12 ++++-------- gdb/cli/cli-script.c | 8 ++++---- gdb/cli/cli-script.h | 2 +- gdb/command.h | 2 +- gdb/defs.h | 2 +- gdb/event-top.c | 6 +++--- gdb/event-top.h | 2 +- gdb/gdbcmd.h | 4 ++-- gdb/guile/scm-cmd.c | 3 +-- gdb/main.c | 29 +---------------------------- gdb/mi/mi-main.c | 4 ++-- gdb/printcmd.c | 2 +- gdb/python/py-cmd.c | 3 +-- gdb/python/python.c | 6 ++---- gdb/record-btrace.c | 8 ++++---- gdb/record-full.c | 2 +- gdb/record.c | 14 +++++++------- gdb/reverse.c | 2 +- gdb/thread.c | 16 +++------------- gdb/top.c | 30 +++++++++++++++++++----------- gdb/top.h | 2 +- gdb/tui/tui-stack.c | 5 +---- 26 files changed, 108 insertions(+), 107 deletions(-) diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index c3e72283c5..b9110976b9 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -101,7 +101,7 @@ print_help_for_command (struct cmd_list_element *c, const char *prefix, bounce function (unless cfunc / sfunc is NULL that is). */ static void -do_const_cfunc (struct cmd_list_element *c, char *args, int from_tty) +do_const_cfunc (struct cmd_list_element *c, const char *args, int from_tty) { c->function.const_cfunc (args, from_tty); } @@ -117,7 +117,7 @@ set_cmd_cfunc (struct cmd_list_element *cmd, cmd_const_cfunc_ftype *cfunc) } static void -do_sfunc (struct cmd_list_element *c, char *args, int from_tty) +do_sfunc (struct cmd_list_element *c, const char *args, int from_tty) { c->function.sfunc (args, from_tty, c); } @@ -1909,7 +1909,7 @@ cmd_func_p (struct cmd_list_element *cmd) /* Call the command function. */ void -cmd_func (struct cmd_list_element *cmd, char *args, int from_tty) +cmd_func (struct cmd_list_element *cmd, const char *args, int from_tty) { if (cmd_func_p (cmd)) { diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h index 9b2d598ff5..09d5c49137 100644 --- a/gdb/cli/cli-decode.h +++ b/gdb/cli/cli-decode.h @@ -107,7 +107,7 @@ struct cmd_list_element cagney/2002-02-02: This function signature is evolving. For the moment suggest sticking with either set_cmd_cfunc() or set_cmd_sfunc(). */ - void (*func) (struct cmd_list_element *c, char *args, int from_tty); + void (*func) (struct cmd_list_element *c, const char *args, int from_tty); /* The command's real callback. At present func() bounces through to one of the below. */ union diff --git a/gdb/cli/cli-dump.c b/gdb/cli/cli-dump.c index 3443299e9a..e97dabfbf2 100644 --- a/gdb/cli/cli-dump.c +++ b/gdb/cli/cli-dump.c @@ -344,7 +344,7 @@ struct dump_context }; static void -call_dump_func (struct cmd_list_element *c, char *args, int from_tty) +call_dump_func (struct cmd_list_element *c, const char *args, int from_tty) { struct dump_context *d = (struct dump_context *) get_cmd_context (c); diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 609a419fe8..9477ac8fad 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -80,7 +80,7 @@ as_cli_interp (struct interp *interp) /* Longjmp-safe wrapper for "execute_command". */ static struct gdb_exception safe_execute_command (struct ui_out *uiout, - char *command, + const char *command, int from_tty); /* See cli-interp.h. @@ -332,11 +332,6 @@ cli_interp::exec (const char *command_str) struct ui_file *old_stream; struct gdb_exception result; - /* FIXME: cagney/2003-02-01: Need to const char *propogate - safe_execute_command. */ - char *str = (char *) alloca (strlen (command_str) + 1); - strcpy (str, command_str); - /* 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 @@ -345,7 +340,7 @@ cli_interp::exec (const char *command_str) It is important that it gets reset everytime, since the user could set gdb to use a different interpreter. */ old_stream = cli->cli_uiout->set_stream (gdb_stdout); - result = safe_execute_command (cli->cli_uiout, str, 1); + result = safe_execute_command (cli->cli_uiout, command_str, 1); cli->cli_uiout->set_stream (old_stream); return result; } @@ -357,7 +352,8 @@ cli_interp_base::supports_command_editing () } static struct gdb_exception -safe_execute_command (struct ui_out *command_uiout, char *command, int from_tty) +safe_execute_command (struct ui_out *command_uiout, const char *command, + int from_tty) { struct gdb_exception e = exception_none; struct ui_out *saved_uiout; diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index 4a66db80d8..cec8ba20ca 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -369,7 +369,7 @@ execute_cmd_pre_hook (struct cmd_list_element *c) { scoped_restore_hook_in restore_hook (c); c->hook_in = 1; /* Prevent recursive hooking. */ - execute_user_command (c->hook_pre, (char *) 0); + execute_user_command (c->hook_pre, nullptr); } } @@ -380,12 +380,12 @@ execute_cmd_post_hook (struct cmd_list_element *c) { scoped_restore_hook_in restore_hook (c); c->hook_in = 1; /* Prevent recursive hooking. */ - execute_user_command (c->hook_post, (char *) 0); + execute_user_command (c->hook_post, nullptr); } } void -execute_user_command (struct cmd_list_element *c, char *args) +execute_user_command (struct cmd_list_element *c, const char *args) { struct ui *ui = current_ui; struct command_line *cmdlines; @@ -482,7 +482,7 @@ execute_control_command (struct command_line *cmd) { /* A simple command, execute it and return. */ std::string new_line = insert_user_defined_cmd_args (cmd->line); - execute_command (&new_line[0], 0); + execute_command (new_line.c_str (), 0); ret = cmd->control_type; break; } diff --git a/gdb/cli/cli-script.h b/gdb/cli/cli-script.h index 234faf7c0b..eaca0cd180 100644 --- a/gdb/cli/cli-script.h +++ b/gdb/cli/cli-script.h @@ -122,7 +122,7 @@ extern command_line_up copy_command_lines (struct command_line *cmds); /* Exported to gdb/infrun.c */ -extern void execute_user_command (struct cmd_list_element *c, char *args); +extern void execute_user_command (struct cmd_list_element *c, const char *args); /* If we're in a user-defined command, replace any $argc/$argN reference found in LINE with the arguments that were passed to the diff --git a/gdb/command.h b/gdb/command.h index 69e903fd1c..505375e9ed 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -453,6 +453,6 @@ extern int cmd_func_p (struct cmd_list_element *cmd); /* Call the command function. */ extern void cmd_func (struct cmd_list_element *cmd, - char *args, int from_tty); + const char *args, int from_tty); #endif /* !defined (COMMAND_H) */ diff --git a/gdb/defs.h b/gdb/defs.h index 675c239af2..f76293fedf 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -660,7 +660,7 @@ extern ptid_t (*deprecated_target_wait_hook) (ptid_t ptid, extern void (*deprecated_attach_hook) (void); extern void (*deprecated_detach_hook) (void); extern void (*deprecated_call_command_hook) (struct cmd_list_element * c, - char *cmd, int from_tty); + const char *cmd, int from_tty); extern int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num); diff --git a/gdb/event-top.c b/gdb/event-top.c index 43e2a27163..d674f3fcda 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -565,10 +565,10 @@ async_disable_stdin (void) a whole command. */ void -command_handler (char *command) +command_handler (const char *command) { struct ui *ui = current_ui; - char *c; + const char *c; if (ui->instream == ui->stdin_stream) reinitialize_more_filter (); @@ -759,7 +759,7 @@ command_line_handler (char *rl) hung up but GDB is still alive. In such a case, we just quit gdb killing the inferior program too. */ printf_unfiltered ("quit\n"); - execute_command ((char *) "quit", 1); + execute_command ("quit", 1); } else if (cmd == NULL) { diff --git a/gdb/event-top.h b/gdb/event-top.h index 05241ad0a6..c84980154c 100644 --- a/gdb/event-top.h +++ b/gdb/event-top.h @@ -34,7 +34,7 @@ extern void async_init_signals (void); extern void change_line_handler (int); extern void command_line_handler (char *rl); -extern void command_handler (char *command); +extern void command_handler (const char *command); /* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */ #ifndef STOP_SIGNAL diff --git a/gdb/gdbcmd.h b/gdb/gdbcmd.h index 3191ecd7fe..4a3e94ab3a 100644 --- a/gdb/gdbcmd.h +++ b/gdb/gdbcmd.h @@ -132,8 +132,8 @@ extern struct cmd_list_element *showchecklist; extern struct cmd_list_element *save_cmdlist; -extern void execute_command (char *, int); -extern std::string execute_command_to_string (char *p, int from_tty); +extern void execute_command (const char *, int); +extern std::string execute_command_to_string (const char *p, int from_tty); enum command_control_type execute_control_command (struct command_line *); diff --git a/gdb/guile/scm-cmd.c b/gdb/guile/scm-cmd.c index 0bd5105da5..4745defb27 100644 --- a/gdb/guile/scm-cmd.c +++ b/gdb/guile/scm-cmd.c @@ -292,9 +292,8 @@ cmdscm_destroyer (struct cmd_list_element *self, void *context) static void cmdscm_function (struct cmd_list_element *command, - char *args_entry, int from_tty) + const char *args, int from_tty) { - const char *args = args_entry; command_smob *c_smob/*obj*/ = (command_smob *) get_cmd_context (command); SCM arg_scm, tty_scm, result; diff --git a/gdb/main.c b/gdb/main.c index beb820351d..70e0cc12cc 100644 --- a/gdb/main.c +++ b/gdb/main.c @@ -355,39 +355,12 @@ handle_command_errors (struct gdb_exception e) return 1; } -/* Type of the command callback passed to catch_command_errors. */ - -typedef void (catch_command_errors_ftype) (char *, int); - -/* Wrap calls to commands run before the event loop is started. */ - -static int -catch_command_errors (catch_command_errors_ftype *command, - char *arg, int from_tty) -{ - TRY - { - int was_sync = current_ui->prompt_state == PROMPT_BLOCKED; - - command (arg, from_tty); - - maybe_wait_sync_command_done (was_sync); - } - CATCH (e, RETURN_MASK_ALL) - { - return handle_command_errors (e); - } - END_CATCH - - return 1; -} - /* Type of the command callback passed to the const catch_command_errors. */ typedef void (catch_command_errors_const_ftype) (const char *, int); -/* Const-correct catch_command_errors. */ +/* Wrap calls to commands run before the event loop is started. */ static int catch_command_errors (catch_command_errors_const_ftype command, diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 7d4514459b..5095264b2d 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -2209,7 +2209,7 @@ mi_execute_cli_command (const char *cmd, int args_p, const char *args) /* FIXME: gdb_???? */ fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n", cmd, run.c_str ()); - execute_command (&run[0], 0 /* from_tty */ ); + execute_command (run.c_str (), 0 /* from_tty */ ); } } @@ -2223,7 +2223,7 @@ mi_execute_async_cli_command (const char *cli_command, char **argv, int argc) if (mi_async_p ()) run += "&"; - execute_command (&run[0], 0 /* from_tty */ ); + execute_command (run.c_str (), 0 /* from_tty */ ); } void diff --git a/gdb/printcmd.c b/gdb/printcmd.c index f01ab47494..dbdec34325 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -2652,7 +2652,7 @@ eval_command (const char *arg, int from_tty) std::string expanded = insert_user_defined_cmd_args (stb.c_str ()); - execute_command (&expanded[0], from_tty); + execute_command (expanded.c_str (), from_tty); } void diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index d969b12157..d848600bf5 100644 --- a/gdb/python/py-cmd.c +++ b/gdb/python/py-cmd.c @@ -110,9 +110,8 @@ cmdpy_destroyer (struct cmd_list_element *self, void *context) static void cmdpy_function (struct cmd_list_element *command, - char *args_entry, int from_tty) + const char *args, int from_tty) { - const char *args = args_entry; cmdpy_object *obj = (cmdpy_object *) get_cmd_context (command); gdbpy_enter enter_py (get_current_arch (), current_language); diff --git a/gdb/python/python.c b/gdb/python/python.c index 88a31b0c99..03ea5d5286 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -584,8 +584,6 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw) TRY { - /* Copy the argument text in case the command modifies it. */ - std::string copy (arg); struct interp *interp; scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); @@ -599,9 +597,9 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw) scoped_restore preventer = prevent_dont_repeat (); if (to_string) - to_string_res = execute_command_to_string (©[0], from_tty); + to_string_res = execute_command_to_string (arg, from_tty); else - execute_command (©[0], from_tty); + execute_command (arg, from_tty); } CATCH (except, RETURN_MASK_ALL) { diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 36ddf1c223..050e4cbb4b 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -2892,7 +2892,7 @@ cmd_record_btrace_bts_start (const char *args, int from_tty) TRY { - execute_command ((char *) "target record-btrace", from_tty); + execute_command ("target record-btrace", from_tty); } CATCH (exception, RETURN_MASK_ALL) { @@ -2914,7 +2914,7 @@ cmd_record_btrace_pt_start (const char *args, int from_tty) TRY { - execute_command ((char *) "target record-btrace", from_tty); + execute_command ("target record-btrace", from_tty); } CATCH (exception, RETURN_MASK_ALL) { @@ -2936,7 +2936,7 @@ cmd_record_btrace_start (const char *args, int from_tty) TRY { - execute_command ((char *) "target record-btrace", from_tty); + execute_command ("target record-btrace", from_tty); } CATCH (exception, RETURN_MASK_ALL) { @@ -2944,7 +2944,7 @@ cmd_record_btrace_start (const char *args, int from_tty) TRY { - execute_command ((char *) "target record-btrace", from_tty); + execute_command ("target record-btrace", from_tty); } CATCH (exception, RETURN_MASK_ALL) { diff --git a/gdb/record-full.c b/gdb/record-full.c index 9530df228d..fc5923efe3 100644 --- a/gdb/record-full.c +++ b/gdb/record-full.c @@ -2757,7 +2757,7 @@ record_full_goto_insn (struct record_full_entry *entry, static void cmd_record_full_start (const char *args, int from_tty) { - execute_command ((char *) "target record-full", from_tty); + execute_command ("target record-full", from_tty); } static void diff --git a/gdb/record.c b/gdb/record.c index f3e493a34b..fe5b6b480f 100644 --- a/gdb/record.c +++ b/gdb/record.c @@ -99,25 +99,25 @@ record_start (const char *method, const char *format, int from_tty) if (method == NULL) { if (format == NULL) - execute_command_to_string ((char *) "record", from_tty); + execute_command_to_string ("record", from_tty); else error (_("Invalid format.")); } else if (strcmp (method, "full") == 0) { if (format == NULL) - execute_command_to_string ((char *) "record full", from_tty); + execute_command_to_string ("record full", from_tty); else error (_("Invalid format.")); } else if (strcmp (method, "btrace") == 0) { if (format == NULL) - execute_command_to_string ((char *) "record btrace", from_tty); + execute_command_to_string ("record btrace", from_tty); else if (strcmp (format, "bts") == 0) - execute_command_to_string ((char *) "record btrace bts", from_tty); + execute_command_to_string ("record btrace bts", from_tty); else if (strcmp (format, "pt") == 0) - execute_command_to_string ((char *) "record btrace pt", from_tty); + execute_command_to_string ("record btrace pt", from_tty); else error (_("Invalid format.")); } @@ -130,7 +130,7 @@ record_start (const char *method, const char *format, int from_tty) void record_stop (int from_tty) { - execute_command_to_string ((char *) "record stop", from_tty); + execute_command_to_string ("record stop", from_tty); } /* See record.h. */ @@ -265,7 +265,7 @@ show_record_debug (struct ui_file *file, int from_tty, static void cmd_record_start (const char *args, int from_tty) { - execute_command ((char *) "target record-full", from_tty); + execute_command ("target record-full", from_tty); } /* Truncate the record log from the present point diff --git a/gdb/reverse.c b/gdb/reverse.c index 2ca8917258..2a83ab1c48 100644 --- a/gdb/reverse.c +++ b/gdb/reverse.c @@ -50,7 +50,7 @@ exec_reverse_once (const char *cmd, const char *args, int from_tty) std::string reverse_command = string_printf ("%s %s", cmd, args ? args : ""); scoped_restore restore_exec_dir = make_scoped_restore (&execution_direction, EXEC_REVERSE); - execute_command (&reverse_command[0], from_tty); + execute_command (reverse_command.c_str (), from_tty); } static void diff --git a/gdb/thread.c b/gdb/thread.c index 565292d6ab..396fb6d736 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -1704,10 +1704,7 @@ thread_apply_all_command (const char *cmd, int from_tty) print_thread_id (thr), target_pid_to_str (inferior_ptid)); - /* Use a copy of the command in case it is clobbered by - execute_command. */ - std::string copy = cmd; - execute_command (©[0], from_tty); + execute_command (cmd, from_tty); } } } @@ -1717,7 +1714,7 @@ thread_apply_all_command (const char *cmd, int from_tty) static void thread_apply_command (const char *tidlist, int from_tty) { - char *cmd = NULL; + const char *cmd = NULL; tid_range_parser parser; if (tidlist == NULL || *tidlist == '\000') @@ -1730,7 +1727,7 @@ thread_apply_command (const char *tidlist, int from_tty) if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end)) { - cmd = (char *) parser.cur_tok (); + cmd = parser.cur_tok (); break; } } @@ -1741,10 +1738,6 @@ thread_apply_command (const char *tidlist, int from_tty) if (tidlist == cmd || !isalpha (cmd[0])) invalid_thread_id_error (cmd); - /* Save a copy of the command in case it is clobbered by - execute_command. */ - std::string saved_cmd = cmd; - scoped_restore_current_thread restore_thread; parser.init (tidlist, current_inferior ()->num); @@ -1798,9 +1791,6 @@ thread_apply_command (const char *tidlist, int from_tty) printf_filtered (_("\nThread %s (%s):\n"), print_thread_id (tp), target_pid_to_str (inferior_ptid)); execute_command (cmd, from_tty); - - /* Restore exact command used previously. */ - strcpy (cmd, saved_cmd.c_str ()); } } diff --git a/gdb/top.c b/gdb/top.c index b9c9d8b37f..8cdf7eb4fd 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -237,7 +237,7 @@ ptid_t (*deprecated_target_wait_hook) (ptid_t ptid, things like enabling/disabling buttons, etc... */ void (*deprecated_call_command_hook) (struct cmd_list_element * c, - char *cmd, int from_tty); + const char *cmd, int from_tty); /* Called when the current thread changes. Argument is thread id. */ @@ -545,11 +545,12 @@ set_repeat_arguments (const char *args) Pass FROM_TTY as second argument to the defining function. */ void -execute_command (char *p, int from_tty) +execute_command (const char *p, int from_tty) { struct cleanup *cleanup_if_error, *cleanup; struct cmd_list_element *c; - char *line; + const char *line; + const char *cmd_start = p; cleanup_if_error = make_bpstat_clear_actions_cleanup (); cleanup = prepare_execute_command (); @@ -573,7 +574,7 @@ execute_command (char *p, int from_tty) if (*p) { const char *cmd = p; - char *arg; + const char *arg; int was_sync = current_ui->prompt_state == PROMPT_BLOCKED; line = p; @@ -582,11 +583,11 @@ execute_command (char *p, int from_tty) print_command_trace (p); c = lookup_cmd (&cmd, cmdlist, "", 0, 1); - p = (char *) cmd; + p = cmd; scoped_restore save_repeat_args = make_scoped_restore (&repeat_arguments, nullptr); - char *args_pointer = p; + const char *args_pointer = p; /* Pass null arg rather than an empty one. */ arg = *p ? p : 0; @@ -601,14 +602,20 @@ execute_command (char *p, int from_tty) is_complete_command hack is testing for. */ /* Clear off trailing whitespace, except for set and complete command. */ + std::string without_whitespace; if (arg && c->type != set_cmd && !is_complete_command (c)) { - p = arg + strlen (arg) - 1; + const char *old_end = arg + strlen (arg) - 1; + p = old_end; while (p >= arg && (*p == ' ' || *p == '\t')) p--; - *(p + 1) = '\0'; + if (p != old_end) + { + without_whitespace = std::string (arg, p + 1); + arg = without_whitespace.c_str (); + } } /* If this command has been pre-hooked, run the hook first. */ @@ -636,10 +643,11 @@ execute_command (char *p, int from_tty) /* If this command has been post-hooked, run the hook last. */ execute_cmd_post_hook (c); - if (repeat_arguments != NULL) + if (repeat_arguments != NULL && cmd_start == saved_command_line) { gdb_assert (strlen (args_pointer) >= strlen (repeat_arguments)); - strcpy (args_pointer, repeat_arguments); + strcpy (saved_command_line + (args_pointer - cmd_start), + repeat_arguments); } } @@ -654,7 +662,7 @@ execute_command (char *p, int from_tty) temporarily set to true. */ std::string -execute_command_to_string (char *p, int from_tty) +execute_command_to_string (const char *p, int from_tty) { /* GDB_STDOUT should be better already restored during these restoration callbacks. */ diff --git a/gdb/top.h b/gdb/top.h index cbb3123cf9..d69942a538 100644 --- a/gdb/top.h +++ b/gdb/top.h @@ -231,7 +231,7 @@ extern int quit_confirm (void); extern void quit_force (int *, int); extern void quit_command (const char *, int); extern void quit_cover (void); -extern void execute_command (char *, int); +extern void execute_command (const char *, int); /* If the interpreter is in sync mode (we're running a user command's list, running command hooks or similars), and we just ran a diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c index 4a69b97b9d..d5d18e23dc 100644 --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -499,8 +499,5 @@ _initialize_tui_stack (void) static void tui_update_command (const char *arg, int from_tty) { - char cmd[sizeof("frame 0")]; - - strcpy (cmd, "frame 0"); - execute_command (cmd, from_tty); + execute_command ("frame 0", from_tty); } -- 2.13.6