Constify execute_command
authorTom Tromey <tom@tromey.com>
Sun, 15 Oct 2017 14:36:51 +0000 (08:36 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 7 Nov 2017 20:59:09 +0000 (13:59 -0700)
This constifies execute_command and fixes up the callers.

gdb/ChangeLog
2017-11-07  Tom Tromey  <tom@tromey.com>

* 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) <func>: Constify.

26 files changed:
gdb/ChangeLog
gdb/cli/cli-decode.c
gdb/cli/cli-decode.h
gdb/cli/cli-dump.c
gdb/cli/cli-interp.c
gdb/cli/cli-script.c
gdb/cli/cli-script.h
gdb/command.h
gdb/defs.h
gdb/event-top.c
gdb/event-top.h
gdb/gdbcmd.h
gdb/guile/scm-cmd.c
gdb/main.c
gdb/mi/mi-main.c
gdb/printcmd.c
gdb/python/py-cmd.c
gdb/python/python.c
gdb/record-btrace.c
gdb/record-full.c
gdb/record.c
gdb/reverse.c
gdb/thread.c
gdb/top.c
gdb/top.h
gdb/tui/tui-stack.c

index ad0335610e4d88b2bd634cf59dec1c162e82953a..67f65c4bbc11373da03696ef53469a71c7e1b428 100644 (file)
@@ -1,3 +1,44 @@
+2017-11-07  Tom Tromey  <tom@tromey.com>
+
+       * 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) <func>: Constify.
+
 2017-11-07  Tom Tromey  <tom@tromey.com>
 
        * ada-lang.c (catch_ada_exception_command): Constify.
index c3e72283c50ad8548c9c919a47aacffa98bc29f1..b9110976b94fcdf84fda5de1806e7371fc381231 100644 (file)
@@ -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))
     {
index 9b2d598ff5860a496b743ee1ed5171100fa516da..09d5c491373b34a26ef18c0249391c95bda3b79a 100644 (file)
@@ -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
index 3443299e9ace02f3e1f79aff2a7e6d19cfe3bcea..e97dabfbf200915abc01f8b7a420533c09a99af8 100644 (file)
@@ -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);
 
index 609a419fe86a57e89890f8772b223aefb3948bef..9477ac8fad6416a3f84a221deb23e6393514c482 100644 (file)
@@ -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;
index b06dbc286a3d658ea17a8794882090a9b2703ec8..4df714e93ee05d994a918365150fd22ef1ec78dc 100644 (file)
@@ -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;
@@ -484,7 +484,7 @@ execute_control_command_1 (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;
       }
index 234faf7c0b52489ccdc530fdfe15e6ed1fbe62ef..eaca0cd180c565153ddd317593a1da0a0e12e88b 100644 (file)
@@ -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
index 69e903fd1ce9d6d5a9295c96d99e625f260e4314..505375e9ed76847281e3c43ea64e9eb1cd012f72 100644 (file)
@@ -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) */
index 675c239af251f3304ad80610958a52a2a521508e..f76293fedf77d723f32b9706153a75c859e5d64a 100644 (file)
@@ -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);
index 73771894c9a7afaee400f01c6fd14831ec886b49..89936965a97af9ecd896dba1c6465a2ebf8979bd 100644 (file)
@@ -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)
     {
index d069c568f9991386e0d7ed7bb524a26f7f30df3d..e80eb273af3fd6c0d8645da3447b239ea755dc96 100644 (file)
@@ -36,7 +36,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);
 
 #ifdef SIGTSTP
 extern void handle_sigtstp (int sig);
index 3191ecd7fe3a16b170fab8a478720ecaec447317..4a3e94ab3a29a39f348dfb23d41e39b9adafbdf1 100644 (file)
@@ -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 *);
 
index 0bd5105da5b60b5fc4cfc937940657bbb962a6c0..4745defb27eab0ed0665bc36da2ee21a02b695c5 100644 (file)
@@ -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;
 
index 835ae24dcf0e8a66f63111f3f8eb5e3f14a86613..61168faf500f1f9600978a6f342ba69779eab03d 100644 (file)
@@ -360,39 +360,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,
index d875d800238005adef88211e267ca19aa778d9ae..d3ea13987ff6d8a41c21580fa6f05ca30a032a69 100644 (file)
@@ -2206,7 +2206,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 */ );
     }
 }
 
@@ -2220,7 +2220,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
index 707b331919286c42a6552d51a815e15877f40b04..2e596d1f09b5124a21339980e3407fbd9c83dc92 100644 (file)
@@ -2617,7 +2617,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
index d969b12157313d12658ad6ff82f38d7b286414e4..d848600bf520b0583a901cc913ce0cdc6d92d851 100644 (file)
@@ -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);
index 88a31b0c992d26cf74651c2bb8a3523612bcef90..03ea5d5286cfb047158fa0eafa5109295d8c9653 100644 (file)
@@ -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 (&current_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 (&copy[0], from_tty);
+       to_string_res = execute_command_to_string (arg, from_tty);
       else
-       execute_command (&copy[0], from_tty);
+       execute_command (arg, from_tty);
     }
   CATCH (except, RETURN_MASK_ALL)
     {
index b7e379bc9155c50f61cbc3ee71c2e8d9650584c0..07ef912f2dfddface0a223a68ec14e5673cce7df 100644 (file)
@@ -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)
        {
index 4249c0440adcd71bfe223556e11e0d8ae05d640f..ec6fc696cfdd6452b7c2ae74634853db9024e802 100644 (file)
@@ -2756,7 +2756,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
index 8de871a95d08dc2f8426d26c413582714a2d378f..b53c0bcd1f57f9f37a97d25c55e44825f5cd05be 100644 (file)
@@ -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.  */
@@ -266,7 +266,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
index 7362f321e3615d5df265094b157cfe551038de4e..35d50198b068966842d96fe94bffd0c5cc7ebdca 100644 (file)
@@ -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
index 1e81a614341ff92a9d9a90c78acb2b4e4a6fc0f5..d71568eeffe5764e0624790119989ee9ec7873b7 100644 (file)
@@ -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 (&copy[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 ());
     }
 }
 
index 63e61e77ebb3c71d05ad4f8f559e3c91694cbb48..8cd7c993467df839908d27f5713c2967c6ee7398 100644 (file)
--- 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.  */
 
@@ -539,11 +539,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;
   struct cmd_list_element *c;
-  char *line;
+  const char *line;
+  const char *cmd_start = p;
 
   cleanup_if_error = make_bpstat_clear_actions_cleanup ();
   scoped_value_mark cleanup = prepare_execute_command ();
@@ -566,7 +567,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;
@@ -575,11 +576,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;
@@ -594,14 +595,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.  */
@@ -629,10 +636,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);
        }
     }
 
@@ -646,7 +654,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.  */
index 65d1f08cedbbafd083c4e369a69331358281a1ad..26fe87842f9c56f6209a500bc6fe51b80f8e8e4a 100644 (file)
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -232,7 +232,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
index 4a69b97b9dc3a5ec5d29a290525e232f33b87606..d5d18e23dc7b628822b30bc73173686408658a44 100644 (file)
@@ -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);
 }