From deede35c270b078ae63713cfc12aa2bbc9eb78a7 Mon Sep 17 00:00:00 2001 From: Zachary T Welch Date: Tue, 10 Nov 2009 04:37:17 -0800 Subject: [PATCH] command_handler_t: make args parameter const This patch prevents command handlers from modifying the strings passed in the 'args' array. --- src/helper/command.c | 10 ++++++---- src/helper/command.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/helper/command.c b/src/helper/command.c index 4ce50855..7a42ab20 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -48,7 +48,7 @@ int fast_and_dangerous = 0; Jim_Interp *interp = NULL; static int run_command(command_context_t *context, - command_t *c, char *words[], unsigned num_words); + command_t *c, const char *words[], unsigned num_words); static void tcl_output(void *privData, const char *file, unsigned line, const char *function, const char *string) @@ -141,7 +141,7 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv) log_add_callback(tcl_output, tclOutput); - retval = run_command(context, c, words, nwords); + retval = run_command(context, c, (const char **)words, nwords); log_remove_callback(tcl_output, tclOutput); @@ -435,7 +435,7 @@ char *command_name(struct command_s *c, char delim) } static int run_command(command_context_t *context, - command_t *c, char *words[], unsigned num_words) + command_t *c, const char *words[], unsigned num_words) { int start_word = 0; if (!((context->mode == COMMAND_CONFIG) || (c->mode == COMMAND_ANY) || (c->mode == context->mode))) @@ -445,7 +445,9 @@ static int run_command(command_context_t *context, return ERROR_FAIL; } - int retval = c->handler(context, c->name, words + start_word + 1, num_words - start_word - 1); + unsigned argc = num_words - start_word - 1; + const char **args = words + start_word + 1; + int retval = c->handler(context, c->name, args, argc); if (retval == ERROR_COMMAND_SYNTAX_ERROR) { /* Print help for command */ diff --git a/src/helper/command.h b/src/helper/command.h index 18664d23..fbcc0aa0 100644 --- a/src/helper/command.h +++ b/src/helper/command.h @@ -88,7 +88,7 @@ typedef struct command_context_s */ #define __COMMAND_HANDLER(name, extra...) \ int name(struct command_context_s *cmd_ctx, \ - const char *cmd, char **args, unsigned argc, ##extra) + const char *cmd, const char *args[], unsigned argc, ##extra) /** * Use this to macro to call a command helper (or a nested handler). -- 2.39.5