diff options
Diffstat (limited to 'cli/src/cli-cmd-system.c')
| -rw-r--r-- | cli/src/cli-cmd-system.c | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/cli/src/cli-cmd-system.c b/cli/src/cli-cmd-system.c index 46ff926a2b8..801e8f4efed 100644 --- a/cli/src/cli-cmd-system.c +++ b/cli/src/cli-cmd-system.c @@ -18,10 +18,6 @@ #include "cli-mem-types.h" #include "protocol-common.h" -extern struct rpc_clnt *global_rpc; - -extern rpc_clnt_prog_t *cli_rpc_prog; - int cli_cmd_system_help_cbk(struct cli_state *state, struct cli_cmd_word *in_word, const char **words, int wordcount); @@ -43,36 +39,39 @@ cli_cmd_getspec_cbk(struct cli_state *state, struct cli_cmd_word *word, call_frame_t *frame = NULL; dict_t *dict = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) + if (wordcount != 3) { + cli_usage_out(word->pattern); goto out; + } dict = dict_new(); if (!dict) goto out; - if (wordcount != 3) { - cli_usage_out(word->pattern); - goto out; - } - ret = dict_set_str(dict, "volid", (char *)words[2]); if (ret) goto out; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_GETSPEC]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } ret = proc->fn(frame, THIS, dict); } out: if (!proc && ret) { - if (dict) - dict_unref(dict); if (wordcount > 1) cli_out("Fetching spec for volume %s failed", (char *)words[2]); } + if (dict) + dict_unref(dict); + + CLI_STACK_DESTROY(frame); return ret; } @@ -85,36 +84,39 @@ cli_cmd_pmap_b2p_cbk(struct cli_state *state, struct cli_cmd_word *word, call_frame_t *frame = NULL; dict_t *dict = NULL; - frame = create_frame(THIS, THIS->ctx->pool); - if (!frame) + if (wordcount != 4) { + cli_usage_out(word->pattern); goto out; + } dict = dict_new(); if (!dict) goto out; - if (wordcount != 4) { - cli_usage_out(word->pattern); - goto out; - } - ret = dict_set_str(dict, "brick", (char *)words[3]); if (ret) goto out; proc = &cli_rpc_prog->proctable[GLUSTER_CLI_PMAP_PORTBYBRICK]; if (proc->fn) { + frame = create_frame(THIS, THIS->ctx->pool); + if (!frame) { + ret = -1; + goto out; + } ret = proc->fn(frame, THIS, dict); } out: if (!proc && ret) { - if (dict) - dict_unref(dict); if (wordcount > 1) cli_out("Fetching spec for volume %s failed", (char *)words[3]); } + if (dict) + dict_unref(dict); + + CLI_STACK_DESTROY(frame); return ret; } @@ -174,6 +176,7 @@ make_seq_dict(int argc, char **argv) { char index[] = "4294967296"; // 1<<32 int i = 0; + int len; int ret = 0; dict_t *dict = dict_new(); @@ -181,8 +184,8 @@ make_seq_dict(int argc, char **argv) return NULL; for (i = 0; i < argc; i++) { - snprintf(index, sizeof(index), "%d", i); - ret = dict_set_str(dict, index, argv[i]); + len = snprintf(index, sizeof(index), "%d", i); + ret = dict_set_strn(dict, index, len, argv[i]); if (ret == -1) break; } @@ -322,6 +325,9 @@ out: cli_out("uuid get failed"); } + if (dict) + dict_unref(dict); + CLI_STACK_DESTROY(frame); return ret; } @@ -383,12 +389,15 @@ out: cli_out("uuid reset failed"); } + if (dict) + dict_unref(dict); + CLI_STACK_DESTROY(frame); return ret; } -struct cli_cmd cli_system_cmds[] = { +static struct cli_cmd cli_system_cmds[] = { {"system:: getspec <VOLNAME>", cli_cmd_getspec_cbk, "fetch the volume file for the volume <VOLNAME>"}, @@ -432,6 +441,7 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, char *tmp = NULL; int ret = -1; int i = -1; + int len; int cmd_args_count = 0; int in_cmd_args_count = 0; rpc_clnt_procedure_t *proc = NULL; @@ -439,20 +449,21 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, dict_t *dict = NULL; cli_local_t *local = NULL; - if (wordcount < 3) { + if ((wordcount < 3) || (words[2] == NULL)) { cli_usage_out(word->pattern); goto out; } - dict = dict_new(); - if (!dict) - goto out; - command = strtok_r((char *)words[2], " ", &saveptr); if (command == NULL) { gf_log("cli", GF_LOG_ERROR, "Failed to parse command"); goto out; } + + dict = dict_new(); + if (!dict) + goto out; + do { tmp = strtok_r(NULL, " ", &saveptr); if (tmp) { @@ -480,9 +491,9 @@ cli_cmd_sys_exec_cbk(struct cli_state *state, struct cli_cmd_word *word, for (i = 1; i <= cmd_args_count; i++) { in_cmd_args_count++; - snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", - in_cmd_args_count); - ret = dict_set_str(dict, cmd_arg_name, (char *)words[2 + i]); + len = snprintf(cmd_arg_name, sizeof(cmd_arg_name), "cmd_arg_%d", + in_cmd_args_count); + ret = dict_set_strn(dict, cmd_arg_name, len, (char *)words[2 + i]); if (ret) { gf_log("", GF_LOG_ERROR, "Unable to set %s in dict", cmd_arg_name); goto out; |
