From 896b6bda6904765f36692d76a37b99c0412ca9ae Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 8 Nov 2016 15:26:43 +0000 Subject: [PATCH] breakpoint.c:commands_command_1 constification and cleanup This is constification needed for next patch. Adjust commands_command_1 to use std::string too because the "arg" parameter is currently overwritten and then passed to make_cleanup. The constification alone would trigger a compile error in the make_cleanup call otherwise (passing const char * to void * parameter). Using std::string gets rid of the cleanup in the first place, resulting in simpler code. gdb/ChangeLog: 2016-11-08 Pedro Alves * breakpoint.c (struct commands_info) : Constify. (commands_command_1): Constify 'arg' parameter. Use std::string and string_printf. (commands_from_control_command): Constify 'arg' parameter. (map_breakpoint_numbers): Constify 'args' parameter. * breakpoint.h (commands_from_control_command): Constify 'arg' parameter. --- gdb/ChangeLog | 10 ++++++++++ gdb/breakpoint.c | 42 +++++++++++++++++------------------------- gdb/breakpoint.h | 2 +- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bc422e54290..b71248ad803 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2016-11-08 Pedro Alves + + * breakpoint.c (struct commands_info) : Constify. + (commands_command_1): Constify 'arg' parameter. Use std::string + and string_printf. + (commands_from_control_command): Constify 'arg' parameter. + (map_breakpoint_numbers): Constify 'args' parameter. + * breakpoint.h (commands_from_control_command): Constify 'arg' + parameter. + 2016-11-08 Pedro Alves * cli/cli-script.c (execute_control_command): Assume insert_args diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index ff2a53aef1a..38262c1ce06 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -102,8 +102,9 @@ static void disable_command (char *, int); static void enable_command (char *, int); -static void map_breakpoint_numbers (char *, void (*) (struct breakpoint *, - void *), +static void map_breakpoint_numbers (const char *, + void (*) (struct breakpoint *, + void *), void *); static void ignore_command (char *, int); @@ -1338,7 +1339,7 @@ struct commands_info int from_tty; /* The breakpoint range spec. */ - char *arg; + const char *arg; /* Non-NULL if the body of the commands are being read from this already-parsed command. */ @@ -1399,7 +1400,7 @@ do_map_commands_command (struct breakpoint *b, void *data) } static void -commands_command_1 (char *arg, int from_tty, +commands_command_1 (const char *arg, int from_tty, struct command_line *control) { struct cleanup *cleanups; @@ -1412,32 +1413,22 @@ commands_command_1 (char *arg, int from_tty, extra reference to the commands that we must clean up. */ cleanups = make_cleanup_decref_counted_command_line (&info.cmd); + std::string new_arg; + if (arg == NULL || !*arg) { if (breakpoint_count - prev_breakpoint_count > 1) - arg = xstrprintf ("%d-%d", prev_breakpoint_count + 1, - breakpoint_count); + new_arg = string_printf ("%d-%d", prev_breakpoint_count + 1, + breakpoint_count); else if (breakpoint_count > 0) - arg = xstrprintf ("%d", breakpoint_count); - else - { - /* So that we don't try to free the incoming non-NULL - argument in the cleanup below. Mapping breakpoint - numbers will fail in this case. */ - arg = NULL; - } + new_arg = string_printf ("%d", breakpoint_count); } else - /* The command loop has some static state, so we need to preserve - our argument. */ - arg = xstrdup (arg); - - if (arg != NULL) - make_cleanup (xfree, arg); + new_arg = arg; - info.arg = arg; + info.arg = new_arg.c_str (); - map_breakpoint_numbers (arg, do_map_commands_command, &info); + map_breakpoint_numbers (info.arg, do_map_commands_command, &info); if (info.cmd == NULL) error (_("No breakpoints specified.")); @@ -1457,7 +1448,7 @@ commands_command (char *arg, int from_tty) This is used by cli-script.c to DTRT with breakpoint commands that are part of if and while bodies. */ enum command_control_type -commands_from_control_command (char *arg, struct command_line *cmd) +commands_from_control_command (const char *arg, struct command_line *cmd) { commands_command_1 (arg, 0, cmd); return simple_control; @@ -14795,8 +14786,9 @@ ignore_command (char *args, int from_tty) whose numbers are given in ARGS. */ static void -map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *, - void *), +map_breakpoint_numbers (const char *args, + void (*function) (struct breakpoint *, + void *), void *data) { int num; diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h index e2e15b6a114..8e215b6b925 100644 --- a/gdb/breakpoint.h +++ b/gdb/breakpoint.h @@ -1452,7 +1452,7 @@ extern void enable_breakpoints_after_startup (void); after they've already read the commands into a struct command_line. */ extern enum command_control_type commands_from_control_command - (char *arg, struct command_line *cmd); + (const char *arg, struct command_line *cmd); extern void clear_breakpoint_hit_counts (void); -- 2.30.2