From 44478ab3404a5416c1864f8b47ad28eaca7bb0d9 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 14 Jan 2013 21:05:07 +0000 Subject: [PATCH] * cli/cli-decode.c (add_setshow_string_noescape_cmd): Return the set command. * command.h (add_setshow_string_noescape_cmd): Update. * corefile.c (set_gnutarget_command): Remove trailing whitespace. (complete_set_gnutarget): New function. (_initialize_core): Set the "set gnutarget" completer. gdb/testsuite * gdb.base/completion.exp: Add "set gnutarget" test. --- gdb/ChangeLog | 9 ++++++ gdb/cli/cli-decode.c | 7 +++-- gdb/command.h | 21 +++++++------- gdb/corefile.c | 41 +++++++++++++++++++++++---- gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.base/completion.exp | 3 ++ 6 files changed, 68 insertions(+), 17 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9173b579261..a96fc8fc63c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2013-01-14 Tom Tromey + + * cli/cli-decode.c (add_setshow_string_noescape_cmd): Return the + set command. + * command.h (add_setshow_string_noescape_cmd): Update. + * corefile.c (set_gnutarget_command): Remove trailing whitespace. + (complete_set_gnutarget): New function. + (_initialize_core): Set the "set gnutarget" completer. + 2013-01-14 Tom Tromey PR symtab/14442: diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 758b0ff40e6..27d94bbfc3c 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -597,7 +597,7 @@ add_setshow_string_cmd (char *name, enum command_class class, /* Add element named NAME to both the set and show command LISTs (the list for set/show or some sublist thereof). */ -void +struct cmd_list_element * add_setshow_string_noescape_cmd (char *name, enum command_class class, char **var, const char *set_doc, const char *show_doc, @@ -607,11 +607,14 @@ add_setshow_string_noescape_cmd (char *name, enum command_class class, struct cmd_list_element **set_list, struct cmd_list_element **show_list) { + struct cmd_list_element *set_cmd; + add_setshow_cmd_full (name, class, var_string_noescape, var, set_doc, show_doc, help_doc, set_func, show_func, set_list, show_list, - NULL, NULL); + &set_cmd, NULL); + return set_cmd; } /* Add element named NAME to both the set and show command LISTs (the diff --git a/gdb/command.h b/gdb/command.h index 6809a6286ab..17662b45a64 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -291,16 +291,17 @@ extern void add_setshow_string_cmd (char *name, struct cmd_list_element **set_list, struct cmd_list_element **show_list); -extern void add_setshow_string_noescape_cmd (char *name, - enum command_class class, - char **var, - const char *set_doc, - const char *show_doc, - const char *help_doc, - cmd_sfunc_ftype *set_func, - show_value_ftype *show_func, - struct cmd_list_element **set_list, - struct cmd_list_element **show_list); +extern struct cmd_list_element *add_setshow_string_noescape_cmd + (char *name, + enum command_class class, + char **var, + const char *set_doc, + const char *show_doc, + const char *help_doc, + cmd_sfunc_ftype *set_func, + show_value_ftype *show_func, + struct cmd_list_element **set_list, + struct cmd_list_element **show_list); extern void add_setshow_optional_filename_cmd (char *name, enum command_class class, diff --git a/gdb/corefile.c b/gdb/corefile.c index e940e3cba3f..b268d4cbc05 100644 --- a/gdb/corefile.c +++ b/gdb/corefile.c @@ -34,6 +34,7 @@ #include "completer.h" #include "exceptions.h" #include "observer.h" +#include "cli/cli-utils.h" /* Local function declarations. */ @@ -419,12 +420,40 @@ static void set_gnutarget_command (char *ignore, int from_tty, struct cmd_list_element *c) { + char *gend = gnutarget_string + strlen (gnutarget_string); + + gend = remove_trailing_whitespace (gnutarget_string, gend); + *gend = '\0'; + if (strcmp (gnutarget_string, "auto") == 0) gnutarget = NULL; else gnutarget = gnutarget_string; } +/* A completion function for "set gnutarget". */ + +static VEC (char_ptr) * +complete_set_gnutarget (struct cmd_list_element *cmd, char *text, char *word) +{ + static const char **bfd_targets; + + if (bfd_targets == NULL) + { + int last; + + bfd_targets = bfd_target_list (); + for (last = 0; bfd_targets[last] != NULL; ++last) + ; + + bfd_targets = xrealloc (bfd_targets, (last + 2) * sizeof (const char **)); + bfd_targets[last] = "auto"; + bfd_targets[last + 1] = NULL; + } + + return complete_on_enum (bfd_targets, text, word); +} + /* Set the gnutarget. */ void set_gnutarget (char *newtarget) @@ -447,14 +476,16 @@ No arg means have no core file. This command has been superseded by the\n\ set_cmd_completer (c, filename_completer); - add_setshow_string_noescape_cmd ("gnutarget", class_files, - &gnutarget_string, _("\ + c = add_setshow_string_noescape_cmd ("gnutarget", class_files, + &gnutarget_string, _("\ Set the current BFD target."), _("\ Show the current BFD target."), _("\ Use `set gnutarget auto' to specify automatic detection."), - set_gnutarget_command, - show_gnutarget_string, - &setlist, &showlist); + set_gnutarget_command, + show_gnutarget_string, + &setlist, &showlist); + set_cmd_completer (c, complete_set_gnutarget); + add_alias_cmd ("g", "gnutarget", class_files, 1, &setlist); if (getenv ("GNUTARGET")) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e894bcecdde..17da37af873 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-01-14 Tom Tromey + + * gdb.base/completion.exp: Add "set gnutarget" test. + 2013-01-14 Tom Tromey * gdb.dwarf2/dw2-restrict.S: New file. diff --git a/gdb/testsuite/gdb.base/completion.exp b/gdb/testsuite/gdb.base/completion.exp index 566f5e03d3b..8163a861a07 100644 --- a/gdb/testsuite/gdb.base/completion.exp +++ b/gdb/testsuite/gdb.base/completion.exp @@ -707,6 +707,9 @@ gdb_test "complete ptype struct some_" "ptype struct some_struct" gdb_test "complete ptype enum some_" "ptype enum some_enum" gdb_test "complete ptype union some_" "ptype union some_union" + +gdb_test "complete set gnutarget aut" "set gnutarget auto" + # Restore globals modified in this test... set timeout $oldtimeout1 -- 2.30.2