[PATCH v3 15/19] Implement completion limiting for scmcmd_add_completion.
Keith Seitz
keiths@redhat.com
Fri Aug 7 02:37:00 GMT 2015
Differences in this revision:
1. Free string memory after passing to add_completion.
---
This patch converts scmcmd_add_completion to use add_completion and
adds some tests for this new behavior.
gdb/ChangeLog
* guile/scm-cmd.c (cmdscm_add_completion): Add completer_data
argument. All callers updated.
Use add_completion.
Free memory associated with `item'.
gdb/testsuite/ChangeLog
* gdb.guile/scm-cmd.exp: Add completion limiting tests.
---
gdb/guile/scm-cmd.c | 11 ++++++-----
gdb/testsuite/gdb.guile/scm-cmd.exp | 24 ++++++++++++++++++++++++
2 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/gdb/guile/scm-cmd.c b/gdb/guile/scm-cmd.c
index 58c79c8..1544c2b 100644
--- a/gdb/guile/scm-cmd.c
+++ b/gdb/guile/scm-cmd.c
@@ -348,7 +348,8 @@ cmdscm_bad_completion_result (const char *msg, SCM completion)
The result is a boolean indicating success. */
static int
-cmdscm_add_completion (SCM completion, VEC (char_ptr) **result)
+cmdscm_add_completion (SCM completion, struct completer_data *cdata,
+ VEC (char_ptr) **result)
{
char *item;
SCM except_scm;
@@ -370,8 +371,8 @@ cmdscm_add_completion (SCM completion, VEC (char_ptr) **result)
return 0;
}
- VEC_safe_push (char_ptr, *result, item);
-
+ (void) add_completion (cdata, result, item, NULL, NULL);
+ xfree (item);
return 1;
}
@@ -418,7 +419,7 @@ cmdscm_completer (struct completer_data *cdata,
{
SCM next = scm_car (list);
- if (!cmdscm_add_completion (next, &result))
+ if (!cmdscm_add_completion (next, cdata, &result))
{
VEC_free (char_ptr, result);
goto done;
@@ -442,7 +443,7 @@ cmdscm_completer (struct completer_data *cdata,
goto done;
}
- if (!cmdscm_add_completion (next, &result))
+ if (!cmdscm_add_completion (next, cdata, &result))
{
VEC_free (char_ptr, result);
goto done;
diff --git a/gdb/testsuite/gdb.guile/scm-cmd.exp b/gdb/testsuite/gdb.guile/scm-cmd.exp
index 53c0fdf..ac721c3 100644
--- a/gdb/testsuite/gdb.guile/scm-cmd.exp
+++ b/gdb/testsuite/gdb.guile/scm-cmd.exp
@@ -196,6 +196,30 @@ gdb_test "test-scheme-error-cmd ugh" \
"Error occurred in Scheme-implemented GDB command." \
"call scheme-error command"
+# Test completion limiting.
+set max_completions 2
+gdb_test_no_output "set max-completions $max_completions"
+set end "\\\*\\\*\\\* List may be truncated, "
+append end "max-completions reached\\\. \\\*\\\*\\\*"
+set test "limit complete completer-as-function 42\."
+gdb_test_multiple "complete completer-as-function 42\." $test {
+ "complete completer-as-function 42\\\." { exp_continue }
+ -re "completer-as-function 42\\\.\[1-3\]\r\n" {
+ incr seen
+ exp_continue
+ }
+ -re ".*$end\r\n$gdb_prompt $" {
+ if {$seen == $max_completions} {
+ pass $test
+ } else {
+ fail "$test ($seen/$max_completions)"
+ }
+ }
+ -re ".*$gdb_prompt $" {
+ fail "$test (unlimited)"
+ }
+}
+
# If there is a problem with object management, this can often trigger it.
# It is useful to do this last, after we've created a bunch of command objects.
More information about the Gdb-patches
mailing list