struct command *parent, const char *name);
static char *command_name(struct command *c, char delim);
+/* wrap jimtcl internal data */
+static inline bool jimcmd_is_proc(Jim_Cmd *cmd)
+{
+ return cmd->isproc;
+}
+
static void tcl_output(void *privData, const char *file, unsigned line,
const char *function, const char *string)
{
return NULL;
}
-struct command *command_find_in_context(struct command_context *cmd_ctx,
- const char *name)
-{
- return command_find(cmd_ctx->commands, name);
-}
-
/**
* Add the command into the linked list, sorted by name.
* @param head Address to head of command list pointer, which may be
return c;
}
-int __register_commands(struct command_context *cmd_ctx, struct command *parent,
+static int ___register_commands(struct command_context *cmd_ctx, struct command *parent,
const struct command_registration *cmds, void *data,
struct target *override_target)
{
}
if (NULL != cr->chain) {
struct command *p = c ? : parent;
- retval = __register_commands(cmd_ctx, p, cr->chain, data, override_target);
+ retval = ___register_commands(cmd_ctx, p, cr->chain, data, override_target);
if (ERROR_OK != retval)
break;
}
return retval;
}
+int __register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
+ const struct command_registration *cmds, void *data,
+ struct target *override_target)
+{
+ struct command *parent = NULL;
+
+ if (cmd_prefix)
+ parent = command_find(cmd_ctx->commands, cmd_prefix);
+
+ return ___register_commands(cmd_ctx, parent, cmds, data, override_target);
+}
+
int unregister_all_commands(struct command_context *context,
struct command *parent)
{
enum command_mode mode;
if (argc > 1) {
+ char *full_name = alloc_concatenate_strings(argc - 1, argv + 1);
+ if (!full_name)
+ return JIM_ERR;
+ Jim_Obj *s = Jim_NewStringObj(interp, full_name, -1);
+ Jim_IncrRefCount(s);
+ Jim_Cmd *cmd = Jim_GetCommand(interp, s, JIM_NONE);
+ Jim_DecrRefCount(interp, s);
+ free(full_name);
+ if (cmd && jimcmd_is_proc(cmd)) {
+ Jim_SetResultString(interp, "any", -1);
+ return JIM_OK;
+ }
struct command *c = cmd_ctx->commands;
int remaining = command_unknown_find(argc - 1, argv + 1, c, &c);
/* if nothing could be consumed, then it's an unknown command */