X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fhelper%2Fcommand.c;h=41af035675b55e12e1e0419f3ee2a9c66909f2e0;hb=f0ce88b3af9a6090ac986160950d66317de5087e;hp=7a42ab20fbfaca4c887e12d0248d1c142dc34427;hpb=deede35c270b078ae63713cfc12aa2bbc9eb78a7;p=openocd.git diff --git a/src/helper/command.c b/src/helper/command.c index 7a42ab20fb..41af035675 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -47,8 +47,8 @@ int fast_and_dangerous = 0; Jim_Interp *interp = NULL; -static int run_command(command_context_t *context, - command_t *c, const char *words[], unsigned num_words); +static int run_command(struct command_context *context, + struct command *c, const char *words[], unsigned num_words); static void tcl_output(void *privData, const char *file, unsigned line, const char *function, const char *string) @@ -57,7 +57,7 @@ static void tcl_output(void *privData, const char *file, unsigned line, Jim_AppendString(interp, tclOutput, string, strlen(string)); } -extern command_context_t *global_cmd_ctx; +extern struct command_context *global_cmd_ctx; void script_debug(Jim_Interp *interp, const char *name, unsigned argc, Jim_Obj *const *argv) @@ -79,8 +79,8 @@ void script_debug(Jim_Interp *interp, const char *name, static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { /* the private data is stashed in the interp structure */ - command_t *c; - command_context_t *context; + struct command *c; + struct command_context *context; int retval; int i; int nwords; @@ -102,7 +102,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) script_debug(interp, c->name, argc, argv); - words = malloc(sizeof(char *) * argc); + words = malloc(sizeof(char *) * (argc + 1)); + words[0] = c->name; for (i = 0; i < argc; i++) { int len; @@ -112,12 +113,12 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) /* hit an end of line comment */ break; } - words[i] = strdup(w); - if (words[i] == NULL) + words[i + 1] = strdup(w); + if (words[i + 1] == NULL) { int j; for (j = 0; j < i; j++) - free(words[j]); + free(words[j + 1]); free(words); return JIM_ERR; } @@ -141,7 +142,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) log_add_callback(tcl_output, tclOutput); - retval = run_command(context, c, (const char **)words, nwords); + // turn words[0] into args[-1] with this cast + retval = run_command(context, c, (const char **)words + 1, nwords); log_remove_callback(tcl_output, tclOutput); @@ -150,7 +152,7 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) Jim_DecrRefCount(interp, tclOutput); for (i = 0; i < nwords; i++) - free(words[i]); + free(words[i + 1]); free(words); int *return_retval = Jim_GetAssocData(interp, "retval"); @@ -162,7 +164,7 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return (retval == ERROR_OK)?JIM_OK:JIM_ERR; } -static Jim_Obj *command_name_list(struct command_s *c) +static Jim_Obj *command_name_list(struct command *c) { Jim_Obj *cmd_list = c->parent ? command_name_list(c->parent) : @@ -195,10 +197,10 @@ static void command_helptext_add(Jim_Obj *cmd_list, const char *help) * Find a command by name from a list of commands. * @returns The named command if found, or NULL. */ -static struct command_s *command_find(struct command_s **head, const char *name) +static struct command *command_find(struct command **head, const char *name) { assert(head); - for (struct command_s *cc = *head; cc; cc = cc->next) + for (struct command *cc = *head; cc; cc = cc->next) { if (strcmp(cc->name, name) == 0) return cc; @@ -211,7 +213,7 @@ static struct command_s *command_find(struct command_s **head, const char *name) * @returns Returns false if the named command already exists in the list. * Returns true otherwise. */ -static void command_add_child(struct command_s **head, struct command_s *c) +static void command_add_child(struct command **head, struct command *c) { assert(head); if (NULL == *head) @@ -219,24 +221,24 @@ static void command_add_child(struct command_s **head, struct command_s *c) *head = c; return; } - struct command_s *cc = *head; + struct command *cc = *head; while (cc->next) cc = cc->next; cc->next = c; } -command_t* register_command(command_context_t *context, - command_t *parent, char *name, command_handler_t handler, +struct command* register_command(struct command_context *context, + struct command *parent, char *name, command_handler_t handler, enum command_mode mode, char *help) { if (!context || !name) return NULL; - struct command_s **head = parent ? &parent->children : &context->commands; - struct command_s *c = command_find(head, name); + struct command **head = parent ? &parent->children : &context->commands; + struct command *c = command_find(head, name); if (NULL != c) return c; - c = malloc(sizeof(command_t)); + c = malloc(sizeof(struct command)); c->name = strdup(name); c->parent = parent; @@ -272,9 +274,9 @@ command_t* register_command(command_context_t *context, return c; } -int unregister_all_commands(command_context_t *context) +int unregister_all_commands(struct command_context *context) { - command_t *c, *c2; + struct command *c, *c2; if (context == NULL) return ERROR_OK; @@ -304,9 +306,9 @@ int unregister_all_commands(command_context_t *context) return ERROR_OK; } -int unregister_command(command_context_t *context, char *name) +int unregister_command(struct command_context *context, char *name) { - command_t *c, *p = NULL, *c2; + struct command *c, *p = NULL, *c2; if ((!context) || (!name)) return ERROR_INVALID_ARGUMENTS; @@ -356,14 +358,14 @@ int unregister_command(command_context_t *context, char *name) return ERROR_OK; } -void command_output_text(command_context_t *context, const char *data) +void command_output_text(struct command_context *context, const char *data) { if (context && context->output_handler && data) { context->output_handler(context, data); } } -void command_print_sameline(command_context_t *context, const char *format, ...) +void command_print_sameline(struct command_context *context, const char *format, ...) { char *string; @@ -387,7 +389,7 @@ void command_print_sameline(command_context_t *context, const char *format, ...) va_end(ap); } -void command_print(command_context_t *context, const char *format, ...) +void command_print(struct command_context *context, const char *format, ...) { char *string; @@ -412,7 +414,7 @@ void command_print(command_context_t *context, const char *format, ...) va_end(ap); } -static char *__command_name(struct command_s *c, char delim, unsigned extra) +static char *__command_name(struct command *c, char delim, unsigned extra) { char *name; unsigned len = strlen(c->name); @@ -429,13 +431,13 @@ static char *__command_name(struct command_s *c, char delim, unsigned extra) } return name; } -char *command_name(struct command_s *c, char delim) +char *command_name(struct command *c, char delim) { return __command_name(c, delim, 0); } -static int run_command(command_context_t *context, - command_t *c, const char *words[], unsigned num_words) +static int run_command(struct command_context *context, + struct command *c, const char *words[], unsigned num_words) { int start_word = 0; if (!((context->mode == COMMAND_CONFIG) || (c->mode == COMMAND_ANY) || (c->mode == context->mode))) @@ -447,7 +449,7 @@ static int run_command(command_context_t *context, unsigned argc = num_words - start_word - 1; const char **args = words + start_word + 1; - int retval = c->handler(context, c->name, args, argc); + int retval = c->handler(context, args, argc); if (retval == ERROR_COMMAND_SYNTAX_ERROR) { /* Print help for command */ @@ -473,7 +475,7 @@ static int run_command(command_context_t *context, return retval; } -int command_run_line(command_context_t *context, char *line) +int command_run_line(struct command_context *context, char *line) { /* all the parent commands have been registered with the interpreter * so, can just evaluate the line as a script and check for @@ -543,7 +545,7 @@ int command_run_line(command_context_t *context, char *line) return retval; } -int command_run_linef(command_context_t *context, const char *format, ...) +int command_run_linef(struct command_context *context, const char *format, ...) { int retval = ERROR_FAIL; char *string; @@ -558,23 +560,23 @@ int command_run_linef(command_context_t *context, const char *format, ...) return retval; } -void command_set_output_handler(command_context_t* context, +void command_set_output_handler(struct command_context* context, command_output_handler_t output_handler, void *priv) { context->output_handler = output_handler; context->output_handler_priv = priv; } -command_context_t* copy_command_context(command_context_t* context) +struct command_context* copy_command_context(struct command_context* context) { - command_context_t* copy_context = malloc(sizeof(command_context_t)); + struct command_context* copy_context = malloc(sizeof(struct command_context)); *copy_context = *context; return copy_context; } -int command_done(command_context_t *context) +int command_done(struct command_context *context) { free(context); context = NULL; @@ -762,9 +764,9 @@ COMMAND_HANDLER(handle_fast_command) } -command_context_t* command_init() +struct command_context* command_init() { - command_context_t* context = malloc(sizeof(command_context_t)); + struct command_context* context = malloc(sizeof(struct command_context)); extern const char startup_tcl[]; const char *HostOs; @@ -844,7 +846,7 @@ command_context_t* command_init() return context; } -int command_context_mode(command_context_t *cmd_ctx, enum command_mode mode) +int command_context_mode(struct command_context *cmd_ctx, enum command_mode mode) { if (!cmd_ctx) return ERROR_INVALID_ARGUMENTS; @@ -867,7 +869,7 @@ void process_jim_events(void) #endif } -void register_jim(struct command_context_s *cmd_ctx, const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help) +void register_jim(struct command_context *cmd_ctx, const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help) { Jim_CreateCommand(interp, name, cmd, NULL, NULL);