summaryrefslogtreecommitdiff
path: root/src/helper/command.c
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-24 19:51:49 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-25 10:29:05 -0800
commitd89c6310146d9e5fd1a4ab364f09c0f841da5c73 (patch)
treeadb670ad10acc8327b03112fec3cc6d475c0b359 /src/helper/command.c
parent9e5d8a94f1ea28ee6764511f0cb3c38b22ca8b51 (diff)
downloadopenocd+libswd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.tar.gz
openocd+libswd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.tar.bz2
openocd+libswd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.tar.xz
openocd+libswd-d89c6310146d9e5fd1a4ab364f09c0f841da5c73.zip
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.
Diffstat (limited to 'src/helper/command.c')
-rw-r--r--src/helper/command.c45
1 files changed, 19 insertions, 26 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 8b29ab4a..62fb4879 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,