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.
+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.
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);
}
}
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);
}
/* 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))
{
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
};
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);
/* 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.
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
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;
}
}
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;
{
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);
}
}
{
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;
{
/* 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;
}
/* 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
/* 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) */
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);
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 ();
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)
{
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);
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 *);
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;
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,
/* 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 */ );
}
}
if (mi_async_p ())
run += "&";
- execute_command (&run[0], 0 /* from_tty */ );
+ execute_command (run.c_str (), 0 /* from_tty */ );
}
void
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
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);
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);
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)
{
TRY
{
- execute_command ((char *) "target record-btrace", from_tty);
+ execute_command ("target record-btrace", from_tty);
}
CATCH (exception, RETURN_MASK_ALL)
{
TRY
{
- execute_command ((char *) "target record-btrace", from_tty);
+ execute_command ("target record-btrace", from_tty);
}
CATCH (exception, RETURN_MASK_ALL)
{
TRY
{
- execute_command ((char *) "target record-btrace", from_tty);
+ execute_command ("target record-btrace", from_tty);
}
CATCH (exception, RETURN_MASK_ALL)
{
TRY
{
- execute_command ((char *) "target record-btrace", from_tty);
+ execute_command ("target record-btrace", from_tty);
}
CATCH (exception, RETURN_MASK_ALL)
{
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
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."));
}
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. */
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
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
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);
}
}
}
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')
if (!parser.get_tid_range (&inf_num, &thr_start, &thr_end))
{
- cmd = (char *) parser.cur_tok ();
+ cmd = parser.cur_tok ();
break;
}
}
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);
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 ());
}
}
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. */
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 ();
if (*p)
{
const char *cmd = p;
- char *arg;
+ const char *arg;
int was_sync = current_ui->prompt_state == PROMPT_BLOCKED;
line = p;
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;
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. */
/* 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);
}
}
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. */
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
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);
}