diff options
Diffstat (limited to 'cli/src/cli.c')
-rw-r--r-- | cli/src/cli.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/cli/src/cli.c b/cli/src/cli.c index 58cb61bb417..4e25417f9ba 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -325,13 +325,49 @@ cli_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event, } int +cli_opt_parse (char *opt, struct cli_state *state) +{ + char *oarg; + + oarg = strtail (opt, "mode="); + if (oarg) { + if (strcmp (oarg, "script") == 0) { + state->mode |= GLUSTER_MODE_SCRIPT; + return 0; + } + if (strcmp (oarg, "interactive") == 0) + return 0; + return -1; + } + + return -1; +} + +int parse_cmdline (int argc, char *argv[], struct cli_state *state) { int ret = 0; + int i = 0; + int j = 0; + char *opt = NULL; - state->argc=argc-1; + state->argc=argc-1; state->argv=&argv[1]; + for (i = 0; i < state->argc; i++) { + opt = strtail (state->argv[i], "--"); + if (opt) { + ret = cli_opt_parse (opt, state); + if (ret == -1) { + cli_out ("unrecognized option --%s", opt); + return ret; + } + for (j = i; j < state->argc - 1; j++) + state->argv[j] = state->argv[j + 1]; + state->argc--; + } + } + return ret; } |