openocd/src/helper
Paul Fertser 7f260f5009 helper/command: Handle Tcl return values consistently
Rationale:

1. There's logging output and there're return values;

2. If a function should return something, it should do it explicitly,
same for logging;

3. Interactive interfaces (telnet, Gdb and Tcl RPC) must always return
the result of the evaluation for the given expression. You can
suppress this output by adding ``; after 0'' to the end of your
expression.

4. Some commands "throw an exception" and if you want to be able to
collect both the return value (when it succeeds) and the log output
(when something goes wrong) you can use do like this:

set log_output [capture "catch {reset_config} return_value"]

So what I'm proposing is following:

1. Every jim_handler command should set the return value the standard
JimTcl way, without any tricks. If it needs to print some logging
output, it should use LOG_* functions.

2. The usual commands (COMMANDS) can easily construct their return
value by appending strings with command_print() and
command_print_sameline(). This required changing "struct
command_invocation" and passing a pointer to it to command_print*
functions.

The code is already functional, please test and comment.

TODO items:

1. Modify all jim_handler commands to properly return or log values
(some of them are commented out for now in this patch).

2. Properly document "capture" command and provide a convenience
function to automate log_output + return_value gathering.

3. Add appropriate Doxygen comments.

4. Add Tcl RPC interface description to the manual, all the example
clients in different languages (from the mailing list) to contrib/.

This change is the core part of http://openocd.zylin.com/1815 from
Paul Fertser. It has been extracted and rebased to simplify the
review and provided again as 1815.

Change-Id: I675c91aa9da1e4e7c6f0a8fe6112a00550b9e4db
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/1815
Tested-by: jenkins
2019-05-14 19:38:22 +01:00
..
bin2char.sh Fix some problems with the bin2char utility 2014-08-02 09:01:32 +00:00
binarybuffer.c helper: Code cleanup for hexify() 2016-12-08 12:34:53 +00:00
binarybuffer.h fix for sanitizer errors in left shifts 2019-04-10 16:37:51 +01:00
command.c helper/command: Handle Tcl return values consistently 2019-05-14 19:38:22 +01:00
command.h helper/command: Handle Tcl return values consistently 2019-05-14 19:38:22 +01:00
configuration.c helper/configuration: free script_search_dirs and config_file_names 2018-03-07 23:47:31 +00:00
configuration.h helper/configuration: free script_search_dirs and config_file_names 2018-03-07 23:47:31 +00:00
fileio.c Handle improperly build image files gracefully 2018-02-14 08:27:01 +00:00
fileio.h Handle improperly build image files gracefully 2018-02-14 08:27:01 +00:00
ioutil_stubs.c Remove FSF address from GPL notices 2016-05-24 22:30:01 +01:00
ioutil.c helper/command: change prototype of command_print/command_print_sameline 2019-05-14 19:37:11 +01:00
ioutil.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
jep106.c Remove FSF address from GPL notices 2016-05-24 22:30:01 +01:00
jep106.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
jep106.inc helper: Update jep106 database to JEP106AT 2016-12-08 12:30:14 +00:00
jim-nvp.c jim-nvp: Make Jim_GetOpt_String const-correct 2016-02-29 20:32:31 +00:00
jim-nvp.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
list.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
log.c helper/command: change prototype of command_print/command_print_sameline 2019-05-14 19:37:11 +01:00
log.h Add RISC-V support. 2018-07-24 13:07:26 +01:00
Makefile.am helper,rtos,server: Restore missing warning flags 2017-01-15 10:16:16 +00:00
options.c helper/options: Add missing #include for MinGW and MSYS2 2017-10-03 11:18:20 +01:00
replacements.c Remove FSF address from GPL notices 2016-05-24 22:30:01 +01:00
replacements.h helper/replacements.h: Add missing #include 2018-03-07 23:43:58 +00:00
startup.tcl helper/startup.tcl: remove proc exit 2019-04-03 21:57:22 +01:00
system.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
time_support_common.c Fix usage of timeval_ms() 2016-07-19 10:45:16 +01:00
time_support.c Add timeval_compare helper function 2018-01-25 16:43:45 +00:00
time_support.h Add timeval_compare helper function 2018-01-25 16:43:45 +00:00
types.h helper/types: cast to uint32_t,uint16_t to avoid UB by shifting int too far 2018-03-12 14:12:07 +00:00
update_jep106.pl helper: Add converter from JEP106 ID to manufacturer name 2016-01-22 15:02:16 +00:00
util.c Remove FSF address from GPL notices 2016-05-24 22:30:01 +01:00
util.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00