aboutsummaryrefslogtreecommitdiff
path: root/src/helper/command.c
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2022-12-19 19:41:46 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2023-02-26 10:00:52 +0000
commitc99c043f3f6e79e391debee29371360b0965b2d6 (patch)
tree2735e370a6759d381079ec6025ec53bd6a627879 /src/helper/command.c
parent79caea8745284ac1d2e8931335b58c679cd11882 (diff)
downloadriscv-openocd-c99c043f3f6e79e391debee29371360b0965b2d6.zip
riscv-openocd-c99c043f3f6e79e391debee29371360b0965b2d6.tar.gz
riscv-openocd-c99c043f3f6e79e391debee29371360b0965b2d6.tar.bz2
helper: command: drop last LF ('\n') from sequence of command_print()
The OpenOCD commands produce their TCL text result through the pair command_print() and command_print_sameline(). The latter is used to concatenate output in a single line. At the end of a sequence of command_print(), the last LF is taken as part of the command result, while it is not always needed, and it is even annoying when the output of two commands needs to be concatenate in a single line. Using command_print_sameline() in place of the last call to command_print() would solve the problem but it's quite expensive in term of coding to fix all the existing commands. Drop the last LF, if present. Commands that would specifically need a LF as last char, can add an extra LF at the end of the output. Document this behavior in command.h. Change-Id: I6757c20fbfce923dd393083146e8d5a1f3b790b4 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7471 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src/helper/command.c')
-rw-r--r--src/helper/command.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index ca66cf7..12434ec 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -543,8 +543,16 @@ static int run_command(struct command_context *context,
if (retval != ERROR_OK)
LOG_DEBUG("Command '%s' failed with error code %d",
words[0], retval);
- /* Use the command output as the Tcl result */
- Jim_SetResult(context->interp, cmd.output);
+ /*
+ * Use the command output as the Tcl result.
+ * Drop last '\n' to allow command output concatenation
+ * while keep using command_print() everywhere.
+ */
+ const char *output_txt = Jim_String(cmd.output);
+ int len = strlen(output_txt);
+ if (len && output_txt[len - 1] == '\n')
+ --len;
+ Jim_SetResultString(context->interp, output_txt, len);
}
Jim_DecrRefCount(context->interp, cmd.output);