Use unique_xmalloc_ptr<char> when demangling

I noticed that some methods in language_defn could use
unique_xmalloc_ptr<char> rather than a plain 'char *'.  This patch
implements this change, fixing up the fallout and changing
gdb_demangle to also return this type.  In one spot, std::string is
used to simplify some related code, and in another, an auto_obstack is
used to avoid manual management.

Regression tested on x86-64 Fedora 34.
This commit is contained in:
Tom Tromey 2021-10-04 08:44:22 -06:00
parent e133de4984
commit 3456e70c9d
23 changed files with 118 additions and 136 deletions

View file

@ -251,8 +251,9 @@ public:
}
/* See language.h. */
bool sniff_from_mangled_name (const char *mangled,
char **demangled) const override
bool sniff_from_mangled_name
(const char *mangled, gdb::unique_xmalloc_ptr<char> *demangled)
const override
{
*demangled = demangle_symbol (mangled, 0);
return *demangled != NULL;
@ -260,7 +261,8 @@ public:
/* See language.h. */
char *demangle_symbol (const char *mangled, int options) const override;
gdb::unique_xmalloc_ptr<char> demangle_symbol (const char *mangled,
int options) const override;
/* See language.h. */
@ -318,7 +320,7 @@ public:
/* See declaration of objc_language::demangle_symbol above. */
char *
gdb::unique_xmalloc_ptr<char>
objc_language::demangle_symbol (const char *mangled, int options) const
{
char *demangled, *cp;
@ -376,7 +378,7 @@ objc_language::demangle_symbol (const char *mangled, int options) const
*cp++ = ']'; /* closing right brace */
*cp++ = 0; /* string terminator */
return demangled;
return gdb::unique_xmalloc_ptr<char> (demangled);
}
else
return nullptr; /* Not an objc mangled name. */