diff options
author | Tom Tromey <tom@tromey.com> | 2017-08-13 23:38:09 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-09-03 13:03:08 -0600 |
commit | 453437863c82afc8ed5bfcb937a2e297957fc212 (patch) | |
tree | ef62052b8c22b6146b3e60377c69cf4a412488fc /gdb/demangle.c | |
parent | b57af50345945f32e6615391ac62a4f589c0fada (diff) | |
download | gdb-453437863c82afc8ed5bfcb937a2e297957fc212.zip gdb-453437863c82afc8ed5bfcb937a2e297957fc212.tar.gz gdb-453437863c82afc8ed5bfcb937a2e297957fc212.tar.bz2 |
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 <tom@tromey.com>
* demangle.c (demangle_command): Use std::string,
unique_xmalloc_ptr.
Diffstat (limited to 'gdb/demangle.c')
-rw-r--r-- | gdb/demangle.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/gdb/demangle.c b/gdb/demangle.c index 2d79c1d..8823569 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<char> 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<char> 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 */ |