* cli/cli-decode.c (add_setshow_string_noescape_cmd): Return the
authorTom Tromey <tromey@redhat.com>
Mon, 14 Jan 2013 21:05:07 +0000 (21:05 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 14 Jan 2013 21:05:07 +0000 (21:05 +0000)
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
gdb/cli/cli-decode.c
gdb/command.h
gdb/corefile.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/completion.exp

index 9173b579261d965c952a7a45431039f3aa466409..a96fc8fc63c92e3b5e4b2dfad5a1f7374fc5b990 100644 (file)
@@ -1,3 +1,12 @@
+2013-01-14  Tom Tromey  <tromey@redhat.com>
+
+       * 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  <tromey@redhat.com>
 
        PR symtab/14442:
index 758b0ff40e6ec9640fd0b1918cefd78084d92abe..27d94bbfc3c512490bbb5330b9d868471239ed83 100644 (file)
@@ -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
index 6809a6286abf00138c72872c87dcaff0f0f02952..17662b45a649d81df7c36d3f31910c8dab0f309c 100644 (file)
@@ -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,
index e940e3cba3f2aa2d684e4b27a4ec4d45c6f3cd5d..b268d4cbc05b5fffa94d9a23d824f935e68f3fe3 100644 (file)
@@ -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"))
index e894bcecddede9bd245c8b22f6fe90d4b1e71035..17da37af87345e4e16c87b803055e1078f949d89 100644 (file)
@@ -1,3 +1,7 @@
+2013-01-14  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.base/completion.exp: Add "set gnutarget" test.
+
 2013-01-14  Tom Tromey  <tromey@redhat.com>
 
        * gdb.dwarf2/dw2-restrict.S: New file.
index 566f5e03d3b8a8713c3f7512cd2ce285ea3cd042..8163a861a077a61169f5403c36ff7a1419f69eb6 100644 (file)
@@ -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