static int run_command(struct command_context *cc, struct iovec *iov,
const char *peername)
{
- int ret, i;
- char *p, *end;
+ int ret, i, argc;
+ char *p, *end, **argv;
const struct lls_command *lcmd = NULL;
unsigned perms;
struct lls_parse_result *lpr;
end = iov->iov_base + iov->iov_len;
for (i = 0; p < end; i++)
p += strlen(p) + 1;
- cc->argc = i;
- cc->argv = para_malloc((cc->argc + 1) * sizeof(char *));
+ argc = i;
+ argv = para_malloc((argc + 1) * sizeof(char *));
for (i = 0, p = iov->iov_base; p < end; i++) {
- cc->argv[i] = para_strdup(p);
+ argv[i] = para_strdup(p);
p += strlen(p) + 1;
}
- cc->argv[cc->argc] = NULL;
+ argv[argc] = NULL;
PARA_NOTICE_LOG("calling com_%s() for %s@%s\n", lls_command_name(lcmd),
cc->u->name, peername);
- ret = lls(lls_parse(cc->argc, cc->argv, lcmd, &lpr, &errctx));
+ ret = lls(lls_parse(argc, argv, lcmd, &lpr, &errctx));
if (ret >= 0) {
const struct server_cmd_user_data *ud = lls_user_data(lcmd);
ret = ud->handler(cc, lpr);
lls_free_parse_result(lpr, lcmd);
} else
send_errctx(cc, errctx);
- free_argv(cc->argv);
+ free_argv(argv);
mutex_lock(mmd_mutex);
mmd->num_commands++;
if (ret >= 0 && (perms & AFS_WRITE))
const char *peer;
/** The paraslash user that executes this command. */
struct user *u;
- /** Argument count. */
- int argc;
- /** Argument vector. */
- char **argv;
/** File descriptor and crypto keys. */
struct stream_cipher_context scc;
};