Factor out final completion match string building
authorPedro Alves <palves@redhat.com>
Wed, 13 Dec 2017 16:38:49 +0000 (16:38 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 13 Dec 2017 16:38:49 +0000 (16:38 +0000)
commit60a20c190789fd75d1955576160cbbfe94c792fb
tree3ca6c6a997ea7ca80c2051857d7cf478eefca4ac
parent0b982d685e840948eed4619843a0cc5ce8991d6c
Factor out final completion match string building

We have several places doing essentially the same thing; factor them
out to a central place.  Some of the places overallocate for no good
reason, or use strcat unnecessarily.  The centralized version is more
precise and to the point.

(I considered making the gdb::unique_xmalloc_ptr overload version of
make_completer_match_str try to realloc (not xrealloc) probably
avoiding an allocation in most cases, but that'd be probably overdoing
it, and also, now that I'm writing this I thought I'd try to see how
could we ever get to filename_completer with "text != word", but I
couldn't figure it out.  Running the testsuite with 'gdb_assert (text
== word);' never tripped on the assertion either.  So post gdb 8.1,
I'll probably propose a patch to simplify filename_completer a bit,
and the gdb::unique_xmalloc_str overload can be removed then.)

gdb/ChangeLog:
2017-12-13  Pedro Alves  <palves@redhat.com>

* cli/cli-decode.c (complete_on_cmdlist, complete_on_enum): Use
make_completion_match_str.
* completer.c: Use gdb::unique_xmalloc_ptr and
make_completion_match_str.
(make_completion_match_str_1): New.
(make_completion_match_str(const char *, const char *,
const char *)): New.
(make_completion_match_str(gdb::unique_xmalloc_ptr<char> &&,
const char *, const char *)): New.
* completer.h (make_completion_match_str(const char *,
const char *, const char *)): New.
(make_completion_match_str(gdb::unique_xmalloc_ptr<char> &&,
const char *, const char *)): New.
* interps.c (interpreter_completer): Use make_completion_match_str.
* symtab.c (completion_list_add_name, add_filename_to_list): Use
make_completion_match_str.
gdb/ChangeLog
gdb/cli/cli-decode.c
gdb/completer.c
gdb/completer.h
gdb/interps.c
gdb/symtab.c