This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA/commit 3/3] Fix invalid profile for command-completer in remote-sim.c
- From: Joel Brobecker <brobecker at adacore dot com>
- To: gdb-patches at sourceware dot org
- Cc: Joel Brobecker <brobecker at adacore dot com>
- Date: Thu, 14 Jun 2012 11:11:58 -0700
- Subject: [RFA/commit 3/3] Fix invalid profile for command-completer in remote-sim.c
- References: <1339697518-11847-1-git-send-email-brobecker@adacore.com>
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.
I only lightly tested this patch, because for the erc32-elf sim,
there does not appear to be any completion information. But GDB
builds again, and does not crash.
I will commit immediatly to fix the build issue for the other
simulators, and fix any problem later.
---
gdb/remote-sim.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/gdb/remote-sim.c b/gdb/remote-sim.c
index 0e7d84e..11e1003 100644
--- a/gdb/remote-sim.c
+++ b/gdb/remote-sim.c
@@ -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. */
--
1.7.1