-/* SPDX-License-Identifier: GPL-2.0-or-later */
+// SPDX-License-Identifier: GPL-2.0-or-later
/***************************************************************************
* Copyright (C) 2005 by Dominic Rath *
#include "config.h"
#endif
-/* see Embedded-HOWTO.txt in Jim Tcl project hosted on BerliOS*/
-#define JIM_EMBEDDED
-
/* @todo the inclusion of target.h here is a layering violation */
#include <jtag/jtag.h>
#include <target/target.h>
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);
}
/* find full path to file */
-static int jim_find(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+COMMAND_HANDLER(handle_find)
{
- if (argc != 2)
- return JIM_ERR;
- const char *file = Jim_GetString(argv[1], NULL);
- char *full_path = find_file(file);
+ if (CMD_ARGC != 1)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ char *full_path = find_file(CMD_ARGV[0]);
if (!full_path)
- return JIM_ERR;
- Jim_Obj *result = Jim_NewStringObj(interp, full_path, strlen(full_path));
+ return ERROR_COMMAND_ARGUMENT_INVALID;
+
+ command_print(CMD, "%s", full_path);
free(full_path);
- Jim_SetResult(interp, result);
- return JIM_OK;
+ return ERROR_OK;
}
COMMAND_HANDLER(handle_echo)
if (!command_can_run(cmd_ctx, c, Jim_GetString(argv[0], NULL)))
return JIM_ERR;
- /*
- * TODO: to be removed after v0.12.0
- * workaround for https://sourceforge.net/p/openocd/tickets/362/
- * After syntax change of "expr" in jimtcl 0.81
- * the replacement of jimtcl "expr" with openocd version in
- * https://review.openocd.org/6510/
- * introduces too many target polling during math expressions with
- * "expr" commands.
- * After v0.12.0 replace the following two lines with
- * target_call_timer_callbacks();
- */
- if (strcmp(c->name, "expr"))
- target_call_timer_callbacks_now();
+ target_call_timer_callbacks();
/*
* Black magic of overridden current target:
{
.name = "ocd_find",
.mode = COMMAND_ANY,
- .jim_handler = jim_find,
+ .handler = handle_find,
.help = "find full path to file",
.usage = "file",
},