From 7e9cc63d2f6539585d47221e75031ba8bc172dec Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 22 May 2016 13:37:48 +0200 Subject: [PATCH] server: Remove ->argc, ->argv from struct command_context. Command handlers should not look at the argv[] vector directly but only use the lopsub library functions to access the parsed command line. In fact, the only function which accesses the argv vector is run_command(). Defining argc and argv as local variables in this function allows to drop the two members from the command context structure. --- command.c | 16 ++++++++-------- command.h | 4 ---- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/command.c b/command.c index d7b68a45..89a6aeaf 100644 --- a/command.c +++ b/command.c @@ -812,8 +812,8 @@ out: 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; @@ -836,23 +836,23 @@ static int run_command(struct command_context *cc, struct iovec *iov, 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)) diff --git a/command.h b/command.h index 8a117b9c..5b01eb79 100644 --- a/command.h +++ b/command.h @@ -6,10 +6,6 @@ struct command_context { 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; }; -- 2.39.5