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)
|
||||
{
|
||||
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;
|
||||
int retval = Jim_CreateCommand(interp, ocd_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);
|
||||
int retval = Jim_CreateCommand(interp, c->name, func, c, NULL);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -3,36 +3,6 @@
|
|||
# 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
|
||||
# match the precise spelling
|
||||
proc find {filename} {
|
||||
|
|
Loading…
Reference in New Issue