From: Zachary T Welch Date: Fri, 20 Nov 2009 18:16:46 +0000 (-0800) Subject: maintain command lists in sorted order X-Git-Tag: v0.4.0-rc1~470 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=7a67aae93c7de1e72baaba65635af0461ad8d040;p=openocd 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. --- 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(