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;
/* 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;
}
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);
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");
struct command_invocation cmd = {
.ctx = context,
+ .name = c->name,
.argc = num_words - start_word - 1,
.argv = words + start_word + 1,
};
*/
struct command_invocation {
struct command_context *ctx;
+ const char *name;
unsigned argc;
const char **argv;
};
* Use this macro to access the name of the command being handled,
* rather than accessing the variable directly. It may be moved.
*/
-#define CMD_NAME CMD_ARGV[-1]
+#define CMD_NAME cmd->name
/// The type signature for commands' handler functions.