Merge forward-search/reverse-search, use gdb::def_vector, remove limit
authorPedro Alves <palves@redhat.com>
Sat, 8 Dec 2018 15:03:29 +0000 (15:03 +0000)
committerPedro Alves <palves@redhat.com>
Sat, 8 Dec 2018 15:03:29 +0000 (15:03 +0000)
commit73e8dc90a8a94bc52e29596b1cc176b882fbbc8e
treeb1ab53e4e6cde9695e59eef91a210008f632680d
parentc0ab2ae3cc9af434ba926015d82a39cdf42c70bf
Merge forward-search/reverse-search, use gdb::def_vector, remove limit

Back in:

 commit 85ae1317add94adef4817927e89cff80b92813dd
 Author:     Stan Shebs <shebs@codesourcery.com>
 AuthorDate: Thu Dec 8 02:27:47 1994 +0000

     * source.c: Various cosmetic changes.
     (forward_search_command): Handle very long source lines correctly.

a buffer with a hard limit was converted to a heap buffer:

  @@ -1228,15 +1284,26 @@ forward_search_command (regex, from_tty)
     stream = fdopen (desc, FOPEN_RT);
     clearerr (stream);
     while (1) {
  -/* FIXME!!!  We walk right off the end of buf if we get a long line!!! */
  -    char buf[4096];            /* Should be reasonable??? */
  -    register char *p = buf;
  +    static char *buf = NULL;
  +    register char *p;
  +    int cursize, newsize;
  +
  +    cursize = 256;
  +    buf = xmalloc (cursize);
  +    p = buf;

However, reverse_search_command has the exact same problem, and that
wasn't fixed.  We still have that "we walk right off" comment...

Recently, the xmalloc above was replaced with a xrealloc, because as
can be seen above, that 'buf' variable above was a static local,
otherwise we'd be leaking.  This commit replaces that and the
associated manual buffer growing with a gdb::def_vector<char>.  I
don't think there's much point in reusing the buffer across command
invocations.

While doing this, I realized that reverse_search_command is almost
identical to forward_search_command.  So this commit factors out a
common helper function instead of duplicating a lot of code.

There are some tests for "forward-search" in gdb.base/list.exp, but
since they use the "search" alias, they were a bit harder to find than
expected.  That's now fixed, both by testing both variants, and by
adding some commentary.  Also, there are no tests for the
"reverse-search" command, so this commit adds some for that too.

gdb/ChangeLog:
2018-12-08  Pedro Alves  <palves@redhat.com>

* source.c (forward_search_command): Rename to ...
(search_command_helper): ... this.  Add 'forward' parameter.
Tweak to use a gdb::def_vector<char> instead of a xrealloc'ed
buffer.  Handle backward searches too.
(forward_search_command, reverse_search_command): Reimplement by
calling search_command_helper.

gdb/testsuite/ChangeLog:
2018-12-08  Pedro Alves  <palves@redhat.com>

* gdb.base/list.exp (test_forward_search): Rename to ...
(test_forward_reverse_search): ... this.  Also test reverse-search
and the forward-search alias.
gdb/ChangeLog
gdb/source.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/list.exp