Fix invalid profile for command-completer in remote-sim.c
authorJoel Brobecker <brobecker@gnat.com>
Thu, 14 Jun 2012 18:17:37 +0000 (18:17 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Thu, 14 Jun 2012 18:17:37 +0000 (18:17 +0000)
The profile of command completers has been change to returna VEC
of char_ptr.  Most completers were updated, except the one in
remote-sim.c.

Unfortunately, to make things a little more difficult, the meat of
the completer is actually implemented in the sim, were VECs are not
available.  This patch thus translates the returned array into a VEC,
and then returns that VEC.

gdb/ChangeLog:

        * remote-sim.c (sim_command_completer): Change type of return
        value to "VEC (char_ptr) *".  Adjust implementation accordingly.

gdb/ChangeLog
gdb/remote-sim.c

index cdf6a01ea5f45b7f69d9da494bbde6fdadea71e4..c16049c88f3a072ca0fe99dc888375a110f31cc5 100644 (file)
@@ -1,3 +1,8 @@
+2012-06-13  Joel Brobecker  <brobecker@adacore.com>
+
+       * remote-sim.c (sim_command_completer): Change type of return
+       value to "VEC (char_ptr) *".  Adjust implementation accordingly.
+
 2012-06-13  Mark Kettenis  <kettenis@gnu.org>
            Jan Kratochvil  <jan.kratochvil@redhat.com>
 
index 0e7d84e04b6cd28c37d72d16fba0386fbc2bce26..11e1003b73def2844ae0d57b1a4a5f6b4b4a7ed3 100644 (file)
@@ -1198,16 +1198,28 @@ simulator_command (char *args, int from_tty)
   registers_changed ();
 }
 
-static char **
+static VEC (char_ptr) *
 sim_command_completer (struct cmd_list_element *ignore, char *text, char *word)
 {
   struct sim_inferior_data *sim_data;
+  char **tmp;
+  int i;
+  VEC (char_ptr) *result;
 
   sim_data = inferior_data (current_inferior (), sim_inferior_data_key);
   if (sim_data == NULL || sim_data->gdbsim_desc == NULL)
     return NULL;
 
-  return sim_complete_command (sim_data->gdbsim_desc, text, word);
+  tmp = sim_complete_command (sim_data->gdbsim_desc, text, word);
+  if (tmp == NULL)
+    return NULL;
+
+  /* Transform the array into a VEC, and then free the array.  */
+  for (i = 0; tmp[i] != NULL; i++)
+    VEC_safe_push (char_ptr, result, tmp[i]);
+  xfree (tmp);
+
+  return result;
 }
 
 /* Check to see if a thread is still alive.  */