From 453437863c82afc8ed5bfcb937a2e297957fc212 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 13 Aug 2017 23:38:09 -0600 Subject: [PATCH] Use std::string and unique_xmalloc_ptr in demangle_command Change demangle_command to use std::string and unique_xmalloc_ptr, removing some cleanups. ChangeLog 2017-09-03 Tom Tromey * demangle.c (demangle_command): Use std::string, unique_xmalloc_ptr. --- gdb/ChangeLog | 5 +++++ gdb/demangle.c | 36 +++++++++++++----------------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ba1397f9fdf..c208b1ef77e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-09-03 Tom Tromey + + * demangle.c (demangle_command): Use std::string, + unique_xmalloc_ptr. + 2017-09-03 Tom Tromey * cli/cli-setshow.c (do_set_command): Use std::string. diff --git a/gdb/demangle.c b/gdb/demangle.c index 2d79c1d8a43..882356992ed 100644 --- a/gdb/demangle.c +++ b/gdb/demangle.c @@ -161,41 +161,33 @@ is_cplus_marker (int c) static void demangle_command (char *args, int from_tty) { - char *demangled, *name, *lang_name = NULL; - char *arg_buf, *arg_start; + char *demangled; + const char *name; + const char *arg_start; int processing_args = 1; const struct language_defn *lang; - struct cleanup *cleanups; - arg_buf = xstrdup (args != NULL ? args : ""); - cleanups = make_cleanup (xfree, arg_buf); - arg_start = arg_buf; + std::string arg_buf = args != NULL ? args : ""; + arg_start = arg_buf.c_str (); + gdb::unique_xmalloc_ptr lang_name; while (processing_args && *arg_start == '-') { - char *p = skip_to_space (arg_start); + const char *p = skip_to_space_const (arg_start); if (strncmp (arg_start, "-l", p - arg_start) == 0) - { - char *lang_name_end; - - lang_name = skip_spaces (p); - lang_name_end = skip_to_space (lang_name); - lang_name = savestring (lang_name, lang_name_end - lang_name); - make_cleanup (xfree, lang_name); - p = lang_name_end; - } + lang_name.reset (extract_arg_const (&p)); else if (strncmp (arg_start, "--", p - arg_start) == 0) processing_args = 0; else { - *p = '\0'; + gdb::unique_xmalloc_ptr option (extract_arg_const (&p)); error (_("Unrecognized option '%s' to demangle command. " - "Try \"help demangle\"."), arg_start); + "Try \"help demangle\"."), option.get ()); } - arg_start = skip_spaces (p); + arg_start = skip_spaces_const (p); } name = arg_start; @@ -207,9 +199,9 @@ demangle_command (char *args, int from_tty) { enum language lang_enum; - lang_enum = language_enum (lang_name); + lang_enum = language_enum (lang_name.get ()); if (lang_enum == language_unknown) - error (_("Unknown language \"%s\""), lang_name); + error (_("Unknown language \"%s\""), lang_name.get ()); lang = language_def (lang_enum); } else @@ -223,8 +215,6 @@ demangle_command (char *args, int from_tty) } else error (_("Can't demangle \"%s\""), name); - - do_cleanups (cleanups); } extern initialize_file_ftype _initialize_demangler; /* -Wmissing-prototypes */ -- 2.30.2