diff options
author | Zachary T Welch <zw@superlucidity.net> | 2009-11-24 19:51:49 -0800 |
---|---|---|
committer | Zachary T Welch <zw@superlucidity.net> | 2009-11-25 10:29:05 -0800 |
commit | d89c6310146d9e5fd1a4ab364f09c0f841da5c73 (patch) | |
tree | adb670ad10acc8327b03112fec3cc6d475c0b359 | |
parent | 9e5d8a94f1ea28ee6764511f0cb3c38b22ca8b51 (diff) | |
download | riscv-openocd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.zip riscv-openocd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.tar.gz riscv-openocd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.tar.bz2 |
add script_command_run helper
Eliminates duplicated code in script_command and handle_unknown_command.
Fixes bug with duplicated help output generated by placeholder commands.
-rw-r--r-- | src/helper/command.c | 45 |
1 files changed, 19 insertions, 26 deletions
diff --git a/src/helper/command.c b/src/helper/command.c index 8b29ab4..62fb487 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -150,33 +150,41 @@ static struct command_context *current_command_context(void) return cmd_ctx; } -static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +static int script_command_run(Jim_Interp *interp, + int argc, Jim_Obj *const *argv, struct command *c, bool capture) { - /* the private data is stashed in the interp structure */ - - struct command *c = interp->cmdPrivData; - assert(c); - target_call_timer_callbacks_now(); LOG_USER_N("%s", ""); /* Keep GDB connection alive*/ - script_debug(interp, c->name, argc, argv); - unsigned nwords; const char **words = script_command_args_alloc(argc, argv, &nwords); if (NULL == words) return JIM_ERR; - Jim_Obj *tclOutput = command_log_capture_start(interp); + Jim_Obj *tclOutput = NULL; + if (capture) + tclOutput = command_log_capture_start(interp); struct command_context *cmd_ctx = current_command_context(); int retval = run_command(cmd_ctx, c, (const char **)words, nwords); - command_log_capture_finish(interp, tclOutput); + if (capture) + command_log_capture_finish(interp, tclOutput); + script_command_args_free(words, nwords); return command_retval_set(interp, retval); } +static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + /* the private data is stashed in the interp structure */ + + struct command *c = interp->cmdPrivData; + assert(c); + script_debug(interp, c->name, argc, argv); + return script_command_run(interp, argc, argv, c, true); +} + /* nice short description of source file */ #define __THIS__FILE__ "command.c" @@ -922,22 +930,7 @@ static int command_unknown(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return (*c->jim_handler)(interp, count, start); } - unsigned nwords; - const char **words = script_command_args_alloc(count, start, &nwords); - if (NULL == words) - return JIM_ERR; - - Jim_Obj *tclOutput = command_log_capture_start(interp); - - int retval = run_command(cmd_ctx, c, words, nwords); - - command_log_capture_finish(interp, tclOutput); - script_command_args_free(words, nwords); - - if (!found && ERROR_OK == retval) - retval = ERROR_FAIL; - - return command_retval_set(interp, retval); + return script_command_run(interp, count, start, c, found); } int help_add_command(struct command_context *cmd_ctx, struct command *parent, |