diff options
author | Zachary T Welch <zw@superlucidity.net> | 2009-11-15 04:21:17 -0800 |
---|---|---|
committer | Zachary T Welch <zw@superlucidity.net> | 2009-11-17 11:40:21 -0800 |
commit | be084414ba00a4ad641af04c3c6858312dd1b336 (patch) | |
tree | 6b32f73b845975eb0af7e8d4634aa5a483a1432d | |
parent | 2861877b32a7a2f4022a1c3d9b66c9b4879878ac (diff) | |
download | openocd_libswd-be084414ba00a4ad641af04c3c6858312dd1b336.tar.gz openocd_libswd-be084414ba00a4ad641af04c3c6858312dd1b336.tar.bz2 openocd_libswd-be084414ba00a4ad641af04c3c6858312dd1b336.tar.xz openocd_libswd-be084414ba00a4ad641af04c3c6858312dd1b336.zip |
add struct command_invocation for COMMAND_HANDLER
Adds the command_invocation structure to encapsulate parameters for
all COMMAND_HANDLER routines. Rather than passing several arguments
to each successive subroutine, a single pointer may be passed around.
Changes the CMD_* macros to reference the new fields.
Updates run_command to create an instance and pass it to the handler.
-rw-r--r-- | src/helper/command.c | 9 | ||||
-rw-r--r-- | src/helper/command.h | 21 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/helper/command.c b/src/helper/command.c index fdb59f01..96d23ab4 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -447,9 +447,12 @@ static int run_command(struct command_context *context, return ERROR_FAIL; } - unsigned argc = num_words - start_word - 1; - const char **args = words + start_word + 1; - int retval = c->handler(context, args, argc); + struct command_invocation cmd = { + .ctx = context, + .argc = num_words - start_word - 1, + .argv = words + start_word + 1, + }; + int retval = c->handler(&cmd); if (retval == ERROR_COMMAND_SYNTAX_ERROR) { /* Print help for command */ diff --git a/src/helper/command.h b/src/helper/command.h index 74849646..b8ea3a4a 100644 --- a/src/helper/command.h +++ b/src/helper/command.h @@ -80,6 +80,16 @@ struct command_context void *output_handler_priv; }; +/** + * When run_command is called, a new instance will be created on the + * stack, filled with the proper values, and passed by reference to the + * required COMMAND_HANDLER routine. + */ +struct command_invocation { + struct command_context *ctx; + unsigned argc; + const char **argv; +}; /** * Command handlers may be defined with more parameters than the base @@ -87,8 +97,7 @@ struct command_context * defining all such derivative types using this macro. */ #define __COMMAND_HANDLER(name, extra...) \ - int name(struct command_context *cmd_ctx, \ - const char *args[], unsigned argc, ##extra) + int name(struct command_invocation *cmd, ##extra) /** * Use this to macro to call a command helper (or a nested handler). @@ -104,7 +113,7 @@ struct command_context * variables in intervening scope(s) by accident. */ #define CALL_COMMAND_HANDLER(name, extra...) \ - name(cmd_ctx, args, argc, ##extra) + name(cmd, ##extra) /** * Always use this macro to define new command handler functions. @@ -125,17 +134,17 @@ struct command_context * Use this macro to access the context of the command being handled, * rather than accessing the variable directly. It may be moved. */ -#define CMD_CTX cmd_ctx +#define CMD_CTX cmd->ctx /** * Use this macro to access the number of arguments for the command being * handled, rather than accessing the variable directly. It may be moved. */ -#define CMD_ARGC argc +#define CMD_ARGC cmd->argc /** * Use this macro to access the arguments for the command being handled, * rather than accessing the variable directly. It may be moved. */ -#define CMD_ARGV args +#define CMD_ARGV cmd->argv /** * Use this macro to access the name of the command being handled, * rather than accessing the variable directly. It may be moved. |