summaryrefslogtreecommitdiff
path: root/src/helper/command.c
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-16 05:46:15 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-17 11:40:21 -0800
commitcffc98ad8047b6dc8d38a6422136638f2df992d2 (patch)
tree678ece1f99a35ab8dad501f9ca0c048ebcef872b /src/helper/command.c
parentbe084414ba00a4ad641af04c3c6858312dd1b336 (diff)
downloadopenocd+libswd-cffc98ad8047b6dc8d38a6422136638f2df992d2.tar.gz
openocd+libswd-cffc98ad8047b6dc8d38a6422136638f2df992d2.tar.bz2
openocd+libswd-cffc98ad8047b6dc8d38a6422136638f2df992d2.tar.xz
openocd+libswd-cffc98ad8047b6dc8d38a6422136638f2df992d2.zip
add CMD_NAME variable in command_invocation
Update CMD_NAME from its migratory home in CMD_ARGV[-1] to cmd->name. Allows CMD_ARGV++ idiom to be used safely in command handlers.
Diffstat (limited to 'src/helper/command.c')
-rw-r--r--src/helper/command.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index 96d23ab4..b9d0d087 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -102,8 +102,7 @@ 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 + 1));
- words[0] = c->name;
+ words = malloc(argc * sizeof(char *));
for (i = 0; i < argc; i++)
{
int len;
@@ -113,12 +112,12 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
/* hit an end of line comment */
break;
}
- words[i + 1] = strdup(w);
- if (words[i + 1] == NULL)
+ words[i] = strdup(w);
+ if (words[i] == NULL)
{
int j;
for (j = 0; j < i; j++)
- free(words[j + 1]);
+ free(words[j]);
free(words);
return JIM_ERR;
}
@@ -143,7 +142,7 @@ static int script_command(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
log_add_callback(tcl_output, tclOutput);
// turn words[0] into CMD_ARGV[-1] with this cast
- retval = run_command(context, c, (const char **)words + 1, nwords);
+ retval = run_command(context, c, (const char **)words, nwords);
log_remove_callback(tcl_output, tclOutput);
@@ -152,7 +151,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 + 1]);
+ free(words[i]);
free(words);
int *return_retval = Jim_GetAssocData(interp, "retval");
@@ -449,6 +448,7 @@ static int run_command(struct command_context *context,
struct command_invocation cmd = {
.ctx = context,
+ .name = c->name,
.argc = num_words - start_word - 1,
.argv = words + start_word + 1,
};