From 784c453a4f1aeee237203dd6257a6ed24bee28c3 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 3 May 2017 17:22:07 -0600 Subject: [PATCH] Remove cleanups from mi_cmd_break_insert_1 This changes mi_argv_to_format to return a string, allowing the removal of some cleanups. gdb/ChangeLog 2017-09-29 Tom Tromey * mi/mi-cmd-break.c (mi_argv_to_format): Return std::string. (mi_cmd_break_insert_1): Update. --- gdb/ChangeLog | 5 +++++ gdb/mi/mi-cmd-break.c | 50 +++++++++++++++++-------------------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5d68fb1f6ab..867692c7a8a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-09-29 Tom Tromey + + * mi/mi-cmd-break.c (mi_argv_to_format): Return std::string. + (mi_cmd_break_insert_1): Update. + 2017-09-29 Tom Tromey * target.h (make_scoped_defer_target_commit_resume): Update. diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 188e4e2d656..6519e297a7b 100644 --- a/gdb/mi/mi-cmd-break.c +++ b/gdb/mi/mi-cmd-break.c @@ -86,76 +86,69 @@ setup_breakpoint_reporting (void) /* Convert arguments in ARGV to the string in "format",argv,argv... and return it. */ -static char * +static std::string mi_argv_to_format (char **argv, int argc) { int i; - struct obstack obstack; - char *ret; - - obstack_init (&obstack); + std::string result; /* Convert ARGV[OIND + 1] to format string and save to FORMAT. */ - obstack_1grow (&obstack, '\"'); + result += '\"'; for (i = 0; i < strlen (argv[0]); i++) { switch (argv[0][i]) { case '\\': - obstack_grow (&obstack, "\\\\", 2); + result += "\\\\"; break; case '\a': - obstack_grow (&obstack, "\\a", 2); + result += "\\a"; break; case '\b': - obstack_grow (&obstack, "\\b", 2); + result += "\\b"; break; case '\f': - obstack_grow (&obstack, "\\f", 2); + result += "\\f"; break; case '\n': - obstack_grow (&obstack, "\\n", 2); + result += "\\n"; break; case '\r': - obstack_grow (&obstack, "\\r", 2); + result += "\\r"; break; case '\t': - obstack_grow (&obstack, "\\t", 2); + result += "\\t"; break; case '\v': - obstack_grow (&obstack, "\\v", 2); + result += "\\v"; break; case '"': - obstack_grow (&obstack, "\\\"", 2); + result += "\\\""; break; default: if (isprint (argv[0][i])) - obstack_grow (&obstack, argv[0] + i, 1); + result += argv[0][i]; else { char tmp[5]; xsnprintf (tmp, sizeof (tmp), "\\%o", (unsigned char) argv[0][i]); - obstack_grow_str (&obstack, tmp); + result += tmp; } break; } } - obstack_1grow (&obstack, '\"'); + result += '\"'; /* Apply other argv to FORMAT. */ for (i = 1; i < argc; i++) { - obstack_1grow (&obstack, ','); - obstack_grow_str (&obstack, argv[i]); + result += ','; + result += argv[i]; } - obstack_1grow (&obstack, '\0'); - - ret = xstrdup ((const char *) obstack_finish (&obstack)); - obstack_free (&obstack, NULL); - return ret; + return result; } /* Insert breakpoint. @@ -174,13 +167,12 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) int pending = 0; int enabled = 1; int tracepoint = 0; - struct cleanup *back_to = make_cleanup (null_cleanup, NULL); enum bptype type_wanted; event_location_up location; struct breakpoint_ops *ops; int is_explicit = 0; struct explicit_location explicit_loc; - char *extra_string = NULL; + std::string extra_string; enum opt { @@ -278,7 +270,6 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) error (_("-dprintf-insert: Missing ")); extra_string = mi_argv_to_format (argv + format_num, argc - format_num); - make_cleanup (xfree, extra_string); address = argv[oind]; } else @@ -343,13 +334,12 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) } create_breakpoint (get_current_arch (), location.get (), condition, thread, - extra_string, + extra_string.c_str (), 0 /* condition and thread are valid. */, temp_p, type_wanted, ignore_count, pending ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE, ops, 0, enabled, 0, 0); - do_cleanups (back_to); } /* Implements the -break-insert command. -- 2.30.2