helper/command: do not replace new commands with ocd_ prefix
The TCL return values are now consistent, no need anymore for the hack of registering the commands with "ocd_" prefix and override them with proc ocd_bouncer. Clean-up the command registration and remove the proc ocd_bouncer. This change was part of http://openocd.zylin.com/1815 from Paul Fertser and has been extracted and rebased to simplify the review. Change-Id: I2a467e73ecb068686ea3fda91bf961aba6db6427 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/5086 Tested-by: jenkinsbscan_optimization
parent
a72561ba91
commit
0840414f0e
|
@ -351,27 +351,11 @@ static int register_command_handler(struct command_context *cmd_ctx,
|
||||||
struct command *c)
|
struct command *c)
|
||||||
{
|
{
|
||||||
Jim_Interp *interp = cmd_ctx->interp;
|
Jim_Interp *interp = cmd_ctx->interp;
|
||||||
char *ocd_name = alloc_printf("ocd_%s", c->name);
|
|
||||||
if (NULL == ocd_name)
|
|
||||||
return JIM_ERR;
|
|
||||||
|
|
||||||
LOG_DEBUG("registering '%s'...", ocd_name);
|
LOG_DEBUG("registering '%s'...", c->name);
|
||||||
|
|
||||||
Jim_CmdProc *func = c->handler ? &script_command : &command_unknown;
|
Jim_CmdProc *func = c->handler ? &script_command : &command_unknown;
|
||||||
int retval = Jim_CreateCommand(interp, ocd_name, func, c, NULL);
|
int retval = Jim_CreateCommand(interp, c->name, func, c, NULL);
|
||||||
free(ocd_name);
|
|
||||||
if (JIM_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
/* we now need to add an overrideable proc */
|
|
||||||
char *override_name = alloc_printf(
|
|
||||||
"proc %s {args} {eval ocd_bouncer %s $args}",
|
|
||||||
c->name, c->name);
|
|
||||||
if (NULL == override_name)
|
|
||||||
return JIM_ERR;
|
|
||||||
|
|
||||||
retval = Jim_Eval_Named(interp, override_name, 0, 0);
|
|
||||||
free(override_name);
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,36 +3,6 @@
|
||||||
# Embedded into OpenOCD executable
|
# Embedded into OpenOCD executable
|
||||||
#
|
#
|
||||||
|
|
||||||
# All commands are registered with an 'ocd_' prefix, while the "real"
|
|
||||||
# command is a wrapper that calls this function. Its primary purpose is
|
|
||||||
# to discard 'handler' command output.
|
|
||||||
# Due to the two nested proc calls, this wrapper has to explicitly run
|
|
||||||
# the wrapped command in the stack frame two levels above.
|
|
||||||
proc ocd_bouncer {name args} {
|
|
||||||
set cmd [format "ocd_%s" $name]
|
|
||||||
set type [eval ocd_command type $cmd $args]
|
|
||||||
set errcode error
|
|
||||||
set skiplevel [expr [eval info level] > 1 ? 2 : 1]
|
|
||||||
if {$type == "native"} {
|
|
||||||
return [uplevel $skiplevel $cmd $args]
|
|
||||||
} else {if {$type == "simple"} {
|
|
||||||
set errcode [catch {uplevel $skiplevel $cmd $args}]
|
|
||||||
if {$errcode == 0} {
|
|
||||||
return ""
|
|
||||||
} else {
|
|
||||||
# 'classic' commands output error message as part of progress output
|
|
||||||
set errmsg ""
|
|
||||||
}
|
|
||||||
} else {if {$type == "group"} {
|
|
||||||
catch {eval ocd_usage $name $args}
|
|
||||||
set errmsg [format "%s: command requires more arguments" \
|
|
||||||
[concat $name " " $args]]
|
|
||||||
} else {
|
|
||||||
set errmsg [format "invalid subcommand \"%s\"" $args]
|
|
||||||
}}}
|
|
||||||
return -code $errcode $errmsg
|
|
||||||
}
|
|
||||||
|
|
||||||
# Try flipping / and \ to find file if the filename does not
|
# Try flipping / and \ to find file if the filename does not
|
||||||
# match the precise spelling
|
# match the precise spelling
|
||||||
proc find {filename} {
|
proc find {filename} {
|
||||||
|
|
Loading…
Reference in New Issue