summaryrefslogtreecommitdiff
path: root/src/helper/command.c
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-10 23:01:44 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-13 10:56:55 -0800
commitf973320cbb98d661bc0e4ba4fa9939ce8bce2b83 (patch)
tree9bece3c274ece8dadb15b8160f14cff3e7c6237f /src/helper/command.c
parentdeede35c270b078ae63713cfc12aa2bbc9eb78a7 (diff)
downloadopenocd+libswd-f973320cbb98d661bc0e4ba4fa9939ce8bce2b83.tar.gz
openocd+libswd-f973320cbb98d661bc0e4ba4fa9939ce8bce2b83.tar.bz2
openocd+libswd-f973320cbb98d661bc0e4ba4fa9939ce8bce2b83.tar.xz
openocd+libswd-f973320cbb98d661bc0e4ba4fa9939ce8bce2b83.zip
command_handler_t: make cmd an indirect parameter
This patch removes 'cmd' from the list of direct parameters, moving that pointer to args[-1] (by way of the new CMD_NAME macro).
Diffstat (limited to 'src/helper/command.c')
-rw-r--r--src/helper/command.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 7a42ab20..3cd11d21 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -102,7 +102,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
script_debug(interp, c->name, argc, argv);
- words = malloc(sizeof(char *) * argc);
+ words = malloc(sizeof(char *) * (argc + 1));
+ words[0] = c->name;
for (i = 0; i < argc; i++)
{
int len;
@@ -112,12 +113,12 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
/* hit an end of line comment */
break;
}
- words[i] = strdup(w);
- if (words[i] == NULL)
+ words[i + 1] = strdup(w);
+ if (words[i + 1] == NULL)
{
int j;
for (j = 0; j < i; j++)
- free(words[j]);
+ free(words[j + 1]);
free(words);
return JIM_ERR;
}
@@ -141,7 +142,8 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
log_add_callback(tcl_output, tclOutput);
- retval = run_command(context, c, (const char **)words, nwords);
+ // turn words[0] into args[-1] with this cast
+ retval = run_command(context, c, (const char **)words + 1, nwords);
log_remove_callback(tcl_output, tclOutput);
@@ -150,7 +152,7 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
Jim_DecrRefCount(interp, tclOutput);
for (i = 0; i < nwords; i++)
- free(words[i]);
+ free(words[i + 1]);
free(words);
int *return_retval = Jim_GetAssocData(interp, "retval");
@@ -447,7 +449,7 @@ static int run_command(command_context_t *context,
unsigned argc = num_words - start_word - 1;
const char **args = words + start_word + 1;
- int retval = c->handler(context, c->name, args, argc);
+ int retval = c->handler(context, args, argc);
if (retval == ERROR_COMMAND_SYNTAX_ERROR)
{
/* Print help for command */