diff options
Diffstat (limited to 'cli/src/cli-cmd-parser.c')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 6d984680e35..d3cb1240fe7 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -1731,3 +1731,58 @@ cli_cmd_volume_status_parse (const char **words, int wordcount,          return ret;  } + +gf_boolean_t +cli_cmd_validate_dumpoption (const char *option) +{ +        char    *opwords[] = {"all", "mem", "iobuf", "callpool", "priv", "fd", +                              "inode", NULL}; +        char    *w = NULL; + +        w = str_getunamb (option, opwords); +        if (!w) { +                gf_log ("cli", GF_LOG_DEBUG, "Unknown statedump option  %s", +                        option); +                return _gf_false; +        } +        return _gf_true; +} + +int +cli_cmd_volume_statedump_options_parse (const char **words, int wordcount, +                                        dict_t **options) +{ +        int     ret = 0; +        int     i = 0; +        dict_t  *dict = NULL; +        int     option_cnt = 0; +        char    option_str[100] = {0,}; + +        for (i = 3; i < wordcount; i++, option_cnt++) { +                if (!cli_cmd_validate_dumpoption (words[i])) { +                        ret = -1; +                        goto out; +                } +                strncat (option_str, words[i], sizeof (words [i])); +                strncat (option_str, " ", 1); +        } +        dict = dict_new (); +        if (!dict) +                goto out; + +        ret = dict_set_str (dict, "options", gf_strdup (option_str)); +        if (ret) +                goto out; + +        ret = dict_set_int32 (dict, "option-cnt", option_cnt); +        if (ret) +                goto out; + +        *options = dict; +out: +        if (ret && dict) +                dict_destroy (dict); +        if (ret) +                gf_log ("cli", GF_LOG_ERROR, "Error parsing dumpoptions"); +        return ret; +}  | 
