Let commands free "name"

This adds a "name_allocated" field to cmd_list_element, so that
commands can own their "name" when necessary.  Then, this changes a
few spots in gdb that currently free the name by hand to instead use
this facility.

gdb/ChangeLog
2019-11-26  Tom Tromey  <tom@tromey.com>

	* python/py-function.c (fnpy_init): Update.
	* value.h (add_internal_function): Adjust declaration.
	* value.c (function_destroyer): Remove.
	(do_add_internal_function): Don't set destroyer or copy name.
	(add_internal_function): Take unique_xmalloc_ptr<char> for name.
	Set name_allocated.
	* python/py-cmd.c (cmdpy_destroyer): Don't free "name".
	(cmdpy_init): Set name_allocated.
	* cli/cli-decode.h (struct cmd_list_element) <name_allocated>: New
	member.
	(~cmd_list_element): Free "name" if needed.

Change-Id: Ie1435cea5bbf4bd92056125f112917c607cbb761
This commit is contained in:
Tom Tromey
2019-11-15 16:56:20 -07:00
parent 1a6d41c643
commit 3ea16160a6
6 changed files with 32 additions and 20 deletions

View File

@ -127,8 +127,8 @@ fnpy_init (PyObject *self, PyObject *args, PyObject *kwds)
if (! docstring)
docstring.reset (xstrdup (_("This function is not documented.")));
add_internal_function (name, std::move (docstring), fnpy_call,
self_ref.release ());
add_internal_function (make_unique_xstrdup (name), std::move (docstring),
fnpy_call, self_ref.release ());
return 0;
}