helper/command: pass command prefix to command registration

Replace the "struct command *parent" parameter with a string that
contains the command prefix.
This abstracts the openocd code from the knowledge of the tree of
struct command.
This also makes unused the function command_find_in_context(), so
remove it.

Change-Id: I598d60719cfdc1811ee6f6edfff8a116f82c7ed6
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/5668
Tested-by: jenkins
Reviewed-by: Oleksij Rempel <linux@rempel-privat.de>
This commit is contained in:
Antonio Borneo 2020-05-10 19:35:56 +02:00
parent 4289389937
commit 41c95aa4ea
7 changed files with 30 additions and 32 deletions

View File

@ -479,8 +479,8 @@ static int nand_init(struct command_context *cmd_ctx)
{
if (!nand_devices)
return ERROR_OK;
struct command *parent = command_find_in_context(cmd_ctx, "nand");
return register_commands(cmd_ctx, parent, nand_exec_command_handlers);
return register_commands(cmd_ctx, "nand", nand_exec_command_handlers);
}
COMMAND_HANDLER(handle_nand_init_command)

View File

@ -109,7 +109,6 @@ static const struct command_registration esirisc_flash_command_handlers[];
FLASH_BANK_COMMAND_HANDLER(esirisc_flash_bank_command)
{
struct esirisc_flash_bank *esirisc_info;
struct command *esirisc_cmd;
if (CMD_ARGC < 9)
return ERROR_COMMAND_SYNTAX_ERROR;
@ -123,8 +122,7 @@ FLASH_BANK_COMMAND_HANDLER(esirisc_flash_bank_command)
bank->driver_priv = esirisc_info;
/* register commands using existing esirisc context */
esirisc_cmd = command_find_in_context(CMD_CTX, "esirisc");
register_commands(CMD_CTX, esirisc_cmd, esirisc_flash_command_handlers);
register_commands(CMD_CTX, "esirisc", esirisc_flash_command_handlers);
return ERROR_OK;
}

View File

@ -1248,8 +1248,7 @@ static int flash_init_drivers(struct command_context *cmd_ctx)
if (!flash_bank_list())
return ERROR_OK;
struct command *parent = command_find_in_context(cmd_ctx, "flash");
return register_commands(cmd_ctx, parent, flash_exec_command_handlers);
return register_commands(cmd_ctx, "flash", flash_exec_command_handlers);
}
COMMAND_HANDLER(handle_flash_bank_command)

View File

@ -244,12 +244,6 @@ static struct command *command_find(struct command *head, const char *name)
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
@ -391,7 +385,7 @@ static struct command *register_command(struct command_context *context,
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)
{
@ -412,7 +406,7 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
}
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;
}
@ -424,6 +418,18 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
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)
{

View File

@ -240,7 +240,7 @@ struct command_registration {
/** Use this as the last entry in an array of command_registration records. */
#define COMMAND_REGISTRATION_DONE { .name = NULL, .chain = NULL }
int __register_commands(struct command_context *cmd_ctx, struct command *parent,
int __register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
const struct command_registration *cmds, void *data,
struct target *override_target);
@ -252,17 +252,17 @@ int __register_commands(struct command_context *cmd_ctx, struct command *parent,
* Otherwise, the chained commands are added as children of the command.
*
* @param cmd_ctx The command_context in which to register the command.
* @param parent Register this command as a child of this, or NULL to
* @param cmd_prefix Register this command as a child of this, or NULL to
* register a top-level command.
* @param cmds Pointer to an array of command_registration records that
* contains the desired command parameters. The last record must have
* NULL for all fields.
* @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
*/
static inline int register_commands(struct command_context *cmd_ctx, struct command *parent,
static inline int register_commands(struct command_context *cmd_ctx, const char *cmd_prefix,
const struct command_registration *cmds)
{
return __register_commands(cmd_ctx, parent, cmds, NULL, NULL);
return __register_commands(cmd_ctx, cmd_prefix, cmds, NULL, NULL);
}
/**
@ -270,7 +270,7 @@ static inline int register_commands(struct command_context *cmd_ctx, struct comm
* that command should override the current target
*
* @param cmd_ctx The command_context in which to register the command.
* @param parent Register this command as a child of this, or NULL to
* @param cmd_prefix Register this command as a child of this, or NULL to
* register a top-level command.
* @param cmds Pointer to an array of command_registration records that
* contains the desired command parameters. The last record must have
@ -279,10 +279,10 @@ static inline int register_commands(struct command_context *cmd_ctx, struct comm
* @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
*/
static inline int register_commands_override_target(struct command_context *cmd_ctx,
struct command *parent, const struct command_registration *cmds,
const char *cmd_prefix, const struct command_registration *cmds,
struct target *target)
{
return __register_commands(cmd_ctx, parent, cmds, NULL, target);
return __register_commands(cmd_ctx, cmd_prefix, cmds, NULL, target);
}
/**
@ -292,7 +292,7 @@ static inline int register_commands_override_target(struct command_context *cmd_
* is unregistered.
*
* @param cmd_ctx The command_context in which to register the command.
* @param parent Register this command as a child of this, or NULL to
* @param cmd_prefix Register this command as a child of this, or NULL to
* register a top-level command.
* @param cmds Pointer to an array of command_registration records that
* contains the desired command parameters. The last record must have
@ -301,10 +301,10 @@ static inline int register_commands_override_target(struct command_context *cmd_
* @returns ERROR_OK on success; ERROR_FAIL if any registration fails.
*/
static inline int register_commands_with_data(struct command_context *cmd_ctx,
struct command *parent, const struct command_registration *cmds,
const char *cmd_prefix, const struct command_registration *cmds,
void *data)
{
return __register_commands(cmd_ctx, parent, cmds, data, NULL);
return __register_commands(cmd_ctx, cmd_prefix, cmds, data, NULL);
}
/**
@ -316,9 +316,6 @@ static inline int register_commands_with_data(struct command_context *cmd_ctx,
int unregister_all_commands(struct command_context *cmd_ctx,
struct command *parent);
struct command *command_find_in_context(struct command_context *cmd_ctx,
const char *name);
void command_set_output_handler(struct command_context *context,
command_output_handler_t output_handler, void *priv);

View File

@ -187,8 +187,7 @@ static int pld_init(struct command_context *cmd_ctx)
if (!pld_devices)
return ERROR_OK;
struct command *parent = command_find_in_context(cmd_ctx, "pld");
return register_commands(cmd_ctx, parent, pld_exec_command_handlers);
return register_commands(cmd_ctx, "pld", pld_exec_command_handlers);
}
COMMAND_HANDLER(handle_pld_init_command)

View File

@ -2107,6 +2107,5 @@ static const struct command_registration etm_exec_command_handlers[] = {
static int etm_register_user_commands(struct command_context *cmd_ctx)
{
struct command *etm_cmd = command_find_in_context(cmd_ctx, "etm");
return register_commands(cmd_ctx, etm_cmd, etm_exec_command_handlers);
return register_commands(cmd_ctx, "etm", etm_exec_command_handlers);
}