diff options
author | Tom Tromey <tom@tromey.com> | 2017-05-03 17:22:07 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-09-29 21:12:11 -0600 |
commit | 784c453a4f1aeee237203dd6257a6ed24bee28c3 (patch) | |
tree | a413e9b3909ec82c36a39446a59f0c0a1d8ef223 /gdb/mi | |
parent | a9bc57b97840a874ad2802e29a44fbf557668808 (diff) | |
download | gdb-784c453a4f1aeee237203dd6257a6ed24bee28c3.zip gdb-784c453a4f1aeee237203dd6257a6ed24bee28c3.tar.gz gdb-784c453a4f1aeee237203dd6257a6ed24bee28c3.tar.bz2 |
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 <tom@tromey.com>
* mi/mi-cmd-break.c (mi_argv_to_format): Return std::string.
(mi_cmd_break_insert_1): Update.
Diffstat (limited to 'gdb/mi')
-rw-r--r-- | gdb/mi/mi-cmd-break.c | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 188e4e2..6519e29 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 <format>")); 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. |