summaryrefslogtreecommitdiff
path: root/src/helper
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-20 10:16:46 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-20 15:03:41 -0800
commit7a67aae93c7de1e72baaba65635af0461ad8d040 (patch)
tree9d07832cdf8a54479a58accf4258b2b9567b7841 /src/helper
parenta19aaf913688424dbd6384028854c178c9eb5bf2 (diff)
downloadopenocd_libswd-7a67aae93c7de1e72baaba65635af0461ad8d040.tar.gz
openocd_libswd-7a67aae93c7de1e72baaba65635af0461ad8d040.tar.bz2
openocd_libswd-7a67aae93c7de1e72baaba65635af0461ad8d040.tar.xz
openocd_libswd-7a67aae93c7de1e72baaba65635af0461ad8d040.zip
maintain command lists in sorted order
Use insertion sort to the command link lists. The only practical effect of this is to order the output of the new 'help' command.
Diffstat (limited to 'src/helper')
-rw-r--r--src/helper/command.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index d8b78759..f6c6b2d7 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -177,7 +177,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
/**
* Find a command by name from a list of commands.
- * @returns The named command if found, or NULL.
+ * @returns Returns the named command if it exists in the list.
+ * Returns NULL otherwise.
*/
static struct command *command_find(struct command *head, const char *name)
{
@@ -190,9 +191,10 @@ static struct command *command_find(struct command *head, const char *name)
}
/**
- * Add the command to the end of linked list.
- * @returns Returns false if the named command already exists in the list.
- * Returns true otherwise.
+ * Add the command into the linked list, sorted by name.
+ * @param head Address to head of command list pointer, which may be
+ * updated if @c c gets inserted at the beginning of the list.
+ * @param c The command to add to the list pointed to by @c head.
*/
static void command_add_child(struct command **head, struct command *c)
{
@@ -202,9 +204,17 @@ static void command_add_child(struct command **head, struct command *c)
*head = c;
return;
}
- struct command *cc = *head;
- while (cc->next) cc = cc->next;
- cc->next = c;
+
+ while ((*head)->next && (strcmp(c->name, (*head)->name) > 0))
+ head = &(*head)->next;
+
+ if (strcmp(c->name, (*head)->name) > 0) {
+ c->next = (*head)->next;
+ (*head)->next = c;
+ } else {
+ c->next = *head;
+ *head = c;
+ }
}
static struct command **command_list_for_parent(