summaryrefslogtreecommitdiff
path: root/src/helper/command.c
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-10-16 12:21:02 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-10-16 12:21:02 +0000
commitcd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6 (patch)
tree2ae6060ad4238e9efff3eb9806f08a7e4174c20e /src/helper/command.c
parent09614074b7eafe413935059d19dcc8df020131ab (diff)
downloadopenocd_libswd-cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6.tar.gz
openocd_libswd-cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6.tar.bz2
openocd_libswd-cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6.tar.xz
openocd_libswd-cd9e0e3115c2e6540e75eb7bf7b159c82d70fbb6.zip
added capture command to capture log output. Useful when wanting to capture log output from tcl procedures that invoke openocd commands
git-svn-id: svn://svn.berlios.de/openocd/trunk@1069 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/helper/command.c')
-rw-r--r--src/helper/command.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 8dde2568..d34c402b 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -624,6 +624,32 @@ static char* openocd_jim_fgets(char *s, int size, void *cookie)
return NULL;
}
+
+static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+ if (argc != 2)
+ return JIM_ERR;
+ int retcode;
+ const char *str = Jim_GetString(argv[1], NULL);
+
+ /* capture log output and return it */
+ Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0);
+ /* a garbage collect can happen, so we need a reference count to this object */
+ Jim_IncrRefCount(tclOutput);
+
+ log_add_callback(tcl_output, tclOutput);
+
+ retcode = Jim_Eval_Named(interp, str, __FILE__, __LINE__ );
+
+ log_remove_callback(tcl_output, tclOutput);
+
+ /* We dump output into this local variable */
+ Jim_SetResult(interp, tclOutput);
+ Jim_DecrRefCount(interp, tclOutput);
+
+ return retcode;
+}
+
command_context_t* command_init()
{
command_context_t* context = malloc(sizeof(command_context_t));
@@ -645,6 +671,7 @@ command_context_t* command_init()
Jim_CreateCommand(interp, "ocd_find", jim_find, NULL, NULL);
Jim_CreateCommand(interp, "echo", jim_echo, NULL, NULL);
+ Jim_CreateCommand(interp, "capture", jim_capture, NULL, NULL);
/* Set Jim's STDIO */
interp->cookie_stdin = interp;