diff options
author | Zachary T Welch <zw@superlucidity.net> | 2009-11-20 10:16:46 -0800 |
---|---|---|
committer | Zachary T Welch <zw@superlucidity.net> | 2009-11-20 15:03:41 -0800 |
commit | 7a67aae93c7de1e72baaba65635af0461ad8d040 (patch) | |
tree | 9d07832cdf8a54479a58accf4258b2b9567b7841 /src/helper | |
parent | a19aaf913688424dbd6384028854c178c9eb5bf2 (diff) | |
download | openocd_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.c | 24 |
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( |