diff options
author | Gluster Ant <bugzilla-bot@gluster.org> | 2018-09-12 17:52:45 +0530 |
---|---|---|
committer | Nigel Babu <nigelb@redhat.com> | 2018-09-12 17:52:45 +0530 |
commit | e16868dede6455cab644805af6fe1ac312775e13 (patch) | |
tree | 15aebdb4fff2d87cf8a72f836816b3aa634da58d /libglusterfs/src/options.c | |
parent | 45a71c0548b6fd2c757aa2e7b7671a1411948894 (diff) |
Land part 2 of clang-format changes
Change-Id: Ia84cc24c8924e6d22d02ac15f611c10e26db99b4
Signed-off-by: Nigel Babu <nigelb@redhat.com>
Diffstat (limited to 'libglusterfs/src/options.c')
-rw-r--r-- | libglusterfs/src/options.c | 1947 |
1 files changed, 957 insertions, 990 deletions
diff --git a/libglusterfs/src/options.c b/libglusterfs/src/options.c index a0f04c772e8..30607d2e390 100644 --- a/libglusterfs/src/options.c +++ b/libglusterfs/src/options.c @@ -16,1238 +16,1206 @@ #define GF_OPTION_LIST_EMPTY(_opt) (_opt->value[0] == NULL) - static int -xlator_option_validate_path (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_path(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - char errstr[256]; - - if (strstr (value, "../")) { - snprintf (errstr, 256, - "invalid path given '%s'", - value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - /* Make sure the given path is valid */ - if (value[0] != '/') { - snprintf (errstr, 256, - "option %s %s: '%s' is not an " - "absolute path name", - key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - ret = 0; + int ret = -1; + char errstr[256]; + + if (strstr(value, "../")) { + snprintf(errstr, 256, "invalid path given '%s'", value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + /* Make sure the given path is valid */ + if (value[0] != '/') { + snprintf(errstr, 256, + "option %s %s: '%s' is not an " + "absolute path name", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } static int -xlator_option_validate_int (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_int(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - long long inputll = 0; - unsigned long long uinputll = 0; - int ret = -1; - char errstr[256]; - - /* Check the range */ - if (gf_string2longlong (value, &inputll) != 0) { - snprintf (errstr, 256, - "invalid number format \"%s\" in option \"%s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - /* Handle '-0' */ - if ((inputll == 0) && (gf_string2ulonglong (value, &uinputll) != 0)) { - snprintf (errstr, 256, - "invalid number format \"%s\" in option \"%s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - if ((opt->min == 0) && (opt->max == 0) && - (opt->validate == GF_OPT_VALIDATE_BOTH)) { - gf_msg_trace (xl->name, 0, "no range check required for " - "'option %s %s'", key, value); - ret = 0; - goto out; + long long inputll = 0; + unsigned long long uinputll = 0; + int ret = -1; + char errstr[256]; + + /* Check the range */ + if (gf_string2longlong(value, &inputll) != 0) { + snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + /* Handle '-0' */ + if ((inputll == 0) && (gf_string2ulonglong(value, &uinputll) != 0)) { + snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + if ((opt->min == 0) && (opt->max == 0) && + (opt->validate == GF_OPT_VALIDATE_BOTH)) { + gf_msg_trace(xl->name, 0, + "no range check required for " + "'option %s %s'", + key, value); + ret = 0; + goto out; + } + + if (opt->validate == GF_OPT_VALIDATE_MIN) { + if (inputll < opt->min) { + snprintf(errstr, 256, + "'%lld' in 'option %s %s' is smaller than " + "minimum value '%.0f'", + inputll, key, value, opt->min); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", + errstr); + goto out; } - - if (opt->validate == GF_OPT_VALIDATE_MIN) { - if (inputll < opt->min) { - snprintf (errstr, 256, - "'%lld' in 'option %s %s' is smaller than " - "minimum value '%.0f'", inputll, key, - value, opt->min); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_INVALID_ENTRY, "%s", errstr); - goto out; - } - } else if (opt->validate == GF_OPT_VALIDATE_MAX) { - if (inputll > opt->max) { - snprintf (errstr, 256, - "'%lld' in 'option %s %s' is greater than " - "maximum value '%.0f'", inputll, key, - value, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_INVALID_ENTRY, "%s", errstr); - goto out; - } - } else if ((inputll < opt->min) || (inputll > opt->max)) { - snprintf (errstr, 256, - "'%lld' in 'option %s %s' is out of range " - "[%.0f - %.0f]", - inputll, key, value, opt->min, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", - errstr); - goto out; + } else if (opt->validate == GF_OPT_VALIDATE_MAX) { + if (inputll > opt->max) { + snprintf(errstr, 256, + "'%lld' in 'option %s %s' is greater than " + "maximum value '%.0f'", + inputll, key, value, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", + errstr); + goto out; } - - ret = 0; + } else if ((inputll < opt->min) || (inputll > opt->max)) { + snprintf(errstr, 256, + "'%lld' in 'option %s %s' is out of range " + "[%.0f - %.0f]", + inputll, key, value, opt->min, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr); + goto out; + } + + ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } - static int -xlator_option_validate_sizet (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_sizet(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - size_t size = 0; - int ret = 0; - char errstr[256]; - - /* Check the range */ - if (gf_string2bytesize_size (value, &size) != 0) { - snprintf (errstr, 256, - "invalid number format \"%s\" in option \"%s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - ret = -1; - goto out; - } - - if ((opt->min == 0) && (opt->max == 0)) { - gf_msg_trace (xl->name, 0, "no range check required for " - "'option %s %s'", key, value); - goto out; - } - - if ((size < opt->min) || (size > opt->max)) { - snprintf (errstr, 256, - "'%" GF_PRI_SIZET "' in 'option %s %s' " - "is out of range [%.0f - %.0f]", - size, key, value, opt->min, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_OUT_OF_RANGE, "%s", errstr); - ret = -1; - } + size_t size = 0; + int ret = 0; + char errstr[256]; + + /* Check the range */ + if (gf_string2bytesize_size(value, &size) != 0) { + snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + ret = -1; + goto out; + } + + if ((opt->min == 0) && (opt->max == 0)) { + gf_msg_trace(xl->name, 0, + "no range check required for " + "'option %s %s'", + key, value); + goto out; + } + + if ((size < opt->min) || (size > opt->max)) { + snprintf(errstr, 256, + "'%" GF_PRI_SIZET + "' in 'option %s %s' " + "is out of range [%.0f - %.0f]", + size, key, value, opt->min, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr); + ret = -1; + } out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } - static int -xlator_option_validate_bool (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_bool(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - char errstr[256]; - gf_boolean_t is_valid; + int ret = -1; + char errstr[256]; + gf_boolean_t is_valid; + /* Check if the value is one of + '0|1|on|off|no|yes|true|false|enable|disable' */ - /* Check if the value is one of - '0|1|on|off|no|yes|true|false|enable|disable' */ + if (gf_string2boolean(value, &is_valid) != 0) { + snprintf(errstr, 256, "option %s %s: '%s' is not a valid boolean value", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } - if (gf_string2boolean (value, &is_valid) != 0) { - snprintf (errstr, 256, - "option %s %s: '%s' is not a valid boolean value", - key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - ret = 0; + ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } - static int -xlator_option_validate_xlator (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_xlator(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - char errstr[256]; - xlator_t *xlopt = NULL; - - - /* Check if the value is one of the xlators */ - xlopt = xl; - while (xlopt->prev) - xlopt = xlopt->prev; - - while (xlopt) { - if (strcmp (value, xlopt->name) == 0) { - ret = 0; - break; - } - xlopt = xlopt->next; + int ret = -1; + char errstr[256]; + xlator_t *xlopt = NULL; + + /* Check if the value is one of the xlators */ + xlopt = xl; + while (xlopt->prev) + xlopt = xlopt->prev; + + while (xlopt) { + if (strcmp(value, xlopt->name) == 0) { + ret = 0; + break; } + xlopt = xlopt->next; + } - if (!xlopt) { - snprintf (errstr, 256, - "option %s %s: '%s' is not a valid volume name", - key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } + if (!xlopt) { + snprintf(errstr, 256, "option %s %s: '%s' is not a valid volume name", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } - ret = 0; + ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } void -set_error_str (char *errstr, size_t len, volume_option_t *opt, const char *key, - const char *value) +set_error_str(char *errstr, size_t len, volume_option_t *opt, const char *key, + const char *value) { - int i = 0; - int ret = 0; - - ret = snprintf (errstr, len, "option %s %s: '%s' is not valid " - "(possible options are ", key, value, value); - - for (i = 0; (i < ZR_OPTION_MAX_ARRAY_SIZE) && opt->value[i];) { - ret += snprintf (errstr + ret, len - ret, "%s", opt->value[i]); - if (((++i) < ZR_OPTION_MAX_ARRAY_SIZE) && - (opt->value[i])) - ret += snprintf (errstr + ret, len - ret, ", "); - else - ret += snprintf (errstr + ret, len - ret, ".)"); - } - return; + int i = 0; + int ret = 0; + + ret = snprintf(errstr, len, + "option %s %s: '%s' is not valid " + "(possible options are ", + key, value, value); + + for (i = 0; (i < ZR_OPTION_MAX_ARRAY_SIZE) && opt->value[i];) { + ret += snprintf(errstr + ret, len - ret, "%s", opt->value[i]); + if (((++i) < ZR_OPTION_MAX_ARRAY_SIZE) && (opt->value[i])) + ret += snprintf(errstr + ret, len - ret, ", "); + else + ret += snprintf(errstr + ret, len - ret, ".)"); + } + return; } int -is_all_whitespaces (const char *value) +is_all_whitespaces(const char *value) { - int i = 0; - size_t len = 0; + int i = 0; + size_t len = 0; - if (value == NULL) - return -1; + if (value == NULL) + return -1; - len = strlen (value); + len = strlen(value); - for (i = 0; i < len; i++) { - if (value[i] == ' ') - continue; - else - return 0; - } + for (i = 0; i < len; i++) { + if (value[i] == ' ') + continue; + else + return 0; + } - return 1; + return 1; } static int -xlator_option_validate_str (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_str(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - int i = 0; - char errstr[4096] = {0,}; - - /* Check if the '*str' is valid */ - if (GF_OPTION_LIST_EMPTY(opt)) { - ret = 0; - goto out; - } - - if (is_all_whitespaces (value) == 1) - goto out; - - for (i = 0; (i < ZR_OPTION_MAX_ARRAY_SIZE) && opt->value[i]; i++) { - #ifdef GF_DARWIN_HOST_OS - if (fnmatch (opt->value[i], value, 0) == 0) { - ret = 0; - break; - } - #else - if (fnmatch (opt->value[i], value, FNM_EXTMATCH) == 0) { - ret = 0; - break; - } - #endif - } - - if ((i == ZR_OPTION_MAX_ARRAY_SIZE) || (!opt->value[i])) - goto out; - /* enter here only if - * 1. reached end of opt->value array and haven't - * validated input - * OR - * 2. valid input list is less than - * ZR_OPTION_MAX_ARRAY_SIZE and input has not - * matched all possible input values. - */ - + int ret = -1; + int i = 0; + char errstr[4096] = { + 0, + }; + + /* Check if the '*str' is valid */ + if (GF_OPTION_LIST_EMPTY(opt)) { ret = 0; + goto out; + } -out: - if (ret) { - set_error_str (errstr, sizeof (errstr), opt, key, value); + if (is_all_whitespaces(value) == 1) + goto out; - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - if (op_errstr) - *op_errstr = gf_strdup (errstr); + for (i = 0; (i < ZR_OPTION_MAX_ARRAY_SIZE) && opt->value[i]; i++) { +#ifdef GF_DARWIN_HOST_OS + if (fnmatch(opt->value[i], value, 0) == 0) { + ret = 0; + break; } - return ret; -} - - -static int -xlator_option_validate_percent (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) -{ - double percent = 0; - int ret = -1; - char errstr[256]; - - /* Check if the value is valid percentage */ - if (gf_string2percent (value, &percent) != 0) { - snprintf (errstr, 256, - "invalid percent format \"%s\" in \"option %s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - if ((percent < 0.0) || (percent > 100.0)) { - snprintf (errstr, 256, - "'%lf' in 'option %s %s' is out of range [0 - 100]", - percent, key, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", - errstr); - goto out; +#else + if (fnmatch(opt->value[i], value, FNM_EXTMATCH) == 0) { + ret = 0; + break; } +#endif + } + + if ((i == ZR_OPTION_MAX_ARRAY_SIZE) || (!opt->value[i])) + goto out; + /* enter here only if + * 1. reached end of opt->value array and haven't + * validated input + * OR + * 2. valid input list is less than + * ZR_OPTION_MAX_ARRAY_SIZE and input has not + * matched all possible input values. + */ + + ret = 0; - ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret) { + set_error_str(errstr, sizeof(errstr), opt, key, value); + + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + if (op_errstr) + *op_errstr = gf_strdup(errstr); + } + return ret; } static int -xlator_option_validate_fractional_value (const char *value) +xlator_option_validate_percent(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - const char *s = NULL; - int ret = 0; - - s = strchr (value, '.'); - if (s) { - for (s = s+1; *s != '\0'; s++) { - if (*s != '0') { - return -1; - } - } - } - - return ret; + double percent = 0; + int ret = -1; + char errstr[256]; + + /* Check if the value is valid percentage */ + if (gf_string2percent(value, &percent) != 0) { + snprintf(errstr, 256, "invalid percent format \"%s\" in \"option %s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + if ((percent < 0.0) || (percent > 100.0)) { + snprintf(errstr, 256, + "'%lf' in 'option %s %s' is out of range [0 - 100]", percent, + key, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr); + goto out; + } + + ret = 0; +out: + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } static int -xlator_option_validate_percent_or_sizet (xlator_t *xl, const char *key, - const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_fractional_value(const char *value) { - int ret = -1; - char errstr[256]; - double size = 0; - gf_boolean_t is_percent = _gf_false; - - if (gf_string2percent_or_bytesize (value, &size, &is_percent) == 0) { - if (is_percent) { - if ((size < 0.0) || (size > 100.0)) { - snprintf (errstr, sizeof (errstr), - "'%lf' in 'option %s %s' is out" - " of range [0 - 100]", size, key, - value); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_OUT_OF_RANGE, "%s", errstr); - goto out; - } - ret = 0; - goto out; - } - - /*Input value of size(in byte) should not be fractional*/ - ret = xlator_option_validate_fractional_value (value); - if (ret) { - snprintf (errstr, sizeof (errstr), "'%lf' in 'option %s" - " %s' should not be fractional value. Use " - "valid unsigned integer value.", size, key, - value); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_INVALID_ENTRY, "%s", errstr); - goto out; - } - - /* Check the range */ - if ((opt->min == 0) && (opt->max == 0)) { - gf_msg_trace (xl->name, 0, "no range check required " - "for 'option %s %s'", key, value); - ret = 0; - goto out; - } - if ((size < opt->min) || (size > opt->max)) { - snprintf (errstr, 256, - "'%lf' in 'option %s %s'" - " is out of range [%.0f - %.0f]", - size, key, value, opt->min, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, - "%s", errstr); - goto out; - } - ret = 0; - goto out; - } - - /* If control reaches here, invalid argument */ - - snprintf (errstr, 256, - "invalid number format \"%s\" in \"option %s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + const char *s = NULL; + int ret = 0; + s = strchr(value, '.'); + if (s) { + for (s = s + 1; *s != '\0'; s++) { + if (*s != '0') { + return -1; + } + } + } -out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + return ret; } - static int -xlator_option_validate_time (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_percent_or_sizet(xlator_t *xl, const char *key, + const char *value, volume_option_t *opt, + char **op_errstr) { - int ret = -1; - char errstr[256]; - uint32_t input_time = 0; - - /* Check if the value is valid time */ - if (gf_string2time (value, &input_time) != 0) { - snprintf (errstr, 256, - "invalid time format \"%s\" in " - "\"option %s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); + int ret = -1; + char errstr[256]; + double size = 0; + gf_boolean_t is_percent = _gf_false; + + if (gf_string2percent_or_bytesize(value, &size, &is_percent) == 0) { + if (is_percent) { + if ((size < 0.0) || (size > 100.0)) { + snprintf(errstr, sizeof(errstr), + "'%lf' in 'option %s %s' is out" + " of range [0 - 100]", + size, key, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", + errstr); goto out; + } + ret = 0; + goto out; } - if ((opt->min == 0) && (opt->max == 0)) { - gf_msg_trace (xl->name, 0, "no range check required for " - "'option %s %s'", key, value); - ret = 0; - goto out; + /*Input value of size(in byte) should not be fractional*/ + ret = xlator_option_validate_fractional_value(value); + if (ret) { + snprintf(errstr, sizeof(errstr), + "'%lf' in 'option %s" + " %s' should not be fractional value. Use " + "valid unsigned integer value.", + size, key, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", + errstr); + goto out; } - if ((input_time < opt->min) || (input_time > opt->max)) { - snprintf (errstr, 256, - "'%"PRIu32"' in 'option %s %s' is " - "out of range [%.0f - %.0f]", - input_time, key, value, - opt->min, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", - errstr); - goto out; + /* Check the range */ + if ((opt->min == 0) && (opt->max == 0)) { + gf_msg_trace(xl->name, 0, + "no range check required " + "for 'option %s %s'", + key, value); + ret = 0; + goto out; + } + if ((size < opt->min) || (size > opt->max)) { + snprintf(errstr, 256, + "'%lf' in 'option %s %s'" + " is out of range [%.0f - %.0f]", + size, key, value, opt->min, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", + errstr); + goto out; } - ret = 0; + goto out; + } + + /* If control reaches here, invalid argument */ + + snprintf(errstr, 256, "invalid number format \"%s\" in \"option %s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } - static int -xlator_option_validate_double (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_time(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - double input = 0.0; - int ret = -1; - char errstr[256]; - - /* Check the range */ - if (gf_string2double (value, &input) != 0) { - snprintf (errstr, 256, - "invalid number format \"%s\" in option \"%s\"", - value, key); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - goto out; - } - - if ((opt->min == 0) && (opt->max == 0) && - (opt->validate == GF_OPT_VALIDATE_BOTH)) { - gf_msg_trace (xl->name, 0, "no range check required for " - "'option %s %s'", key, value); - ret = 0; - goto out; - } - - if (opt->validate == GF_OPT_VALIDATE_MIN) { - if (input < opt->min) { - snprintf (errstr, 256, - "'%f' in 'option %s %s' is smaller than " - "minimum value '%f'", input, key, - value, opt->min); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_INVALID_ENTRY, "%s", errstr); - goto out; - } - } else if (opt->validate == GF_OPT_VALIDATE_MAX) { - if (input > opt->max) { - snprintf (errstr, 256, - "'%f' in 'option %s %s' is greater than " - "maximum value '%f'", input, key, - value, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, - LG_MSG_INVALID_ENTRY, "%s", errstr); - goto out; - } - } else if ((input < opt->min) || (input > opt->max)) { - snprintf (errstr, 256, - "'%f' in 'option %s %s' is out of range " - "[%f - %f]", - input, key, value, opt->min, opt->max); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", - errstr); - goto out; - } - + int ret = -1; + char errstr[256]; + uint32_t input_time = 0; + + /* Check if the value is valid time */ + if (gf_string2time(value, &input_time) != 0) { + snprintf(errstr, 256, + "invalid time format \"%s\" in " + "\"option %s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + if ((opt->min == 0) && (opt->max == 0)) { + gf_msg_trace(xl->name, 0, + "no range check required for " + "'option %s %s'", + key, value); ret = 0; + goto out; + } + + if ((input_time < opt->min) || (input_time > opt->max)) { + snprintf(errstr, 256, + "'%" PRIu32 + "' in 'option %s %s' is " + "out of range [%.0f - %.0f]", + input_time, key, value, opt->min, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr); + goto out; + } + + ret = 0; out: - if (ret && op_errstr) - *op_errstr = gf_strdup (errstr); - return ret; + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; } - static int -xlator_option_validate_addr (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_double(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - char errstr[256]; - - if (!valid_internet_address ((char *)value, _gf_false)) { - snprintf (errstr, 256, - "option %s %s: '%s' is not a valid internet-address," - " it does not conform to standards.", - key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - if (op_errstr) - *op_errstr = gf_strdup (errstr); - } - + double input = 0.0; + int ret = -1; + char errstr[256]; + + /* Check the range */ + if (gf_string2double(value, &input) != 0) { + snprintf(errstr, 256, "invalid number format \"%s\" in option \"%s\"", + value, key); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + goto out; + } + + if ((opt->min == 0) && (opt->max == 0) && + (opt->validate == GF_OPT_VALIDATE_BOTH)) { + gf_msg_trace(xl->name, 0, + "no range check required for " + "'option %s %s'", + key, value); ret = 0; + goto out; + } + + if (opt->validate == GF_OPT_VALIDATE_MIN) { + if (input < opt->min) { + snprintf(errstr, 256, + "'%f' in 'option %s %s' is smaller than " + "minimum value '%f'", + input, key, value, opt->min); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", + errstr); + goto out; + } + } else if (opt->validate == GF_OPT_VALIDATE_MAX) { + if (input > opt->max) { + snprintf(errstr, 256, + "'%f' in 'option %s %s' is greater than " + "maximum value '%f'", + input, key, value, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", + errstr); + goto out; + } + } else if ((input < opt->min) || (input > opt->max)) { + snprintf(errstr, 256, + "'%f' in 'option %s %s' is out of range " + "[%f - %f]", + input, key, value, opt->min, opt->max); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_OUT_OF_RANGE, "%s", errstr); + goto out; + } + + ret = 0; +out: + if (ret && op_errstr) + *op_errstr = gf_strdup(errstr); + return ret; +} - return ret; +static int +xlator_option_validate_addr(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) +{ + int ret = -1; + char errstr[256]; + + if (!valid_internet_address((char *)value, _gf_false)) { + snprintf(errstr, 256, + "option %s %s: '%s' is not a valid internet-address," + " it does not conform to standards.", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + if (op_errstr) + *op_errstr = gf_strdup(errstr); + } + + ret = 0; + + return ret; } int -xlator_option_validate_addr_list (xlator_t *xl, const char *key, - const char *value, volume_option_t *opt, - char **op_errstr) +xlator_option_validate_addr_list(xlator_t *xl, const char *key, + const char *value, volume_option_t *opt, + char **op_errstr) { - int ret = -1; - char *dup_val = NULL; - char *addr_tok = NULL; - char *save_ptr = NULL; - char *entry = NULL; - char *entry_ptr = NULL; - char *dir_and_addr = NULL; - char *addr_ptr = NULL; - char *addr_list = NULL; - char *addr = NULL; - char *dir = NULL; - char errstr[4096] = {0,}; - - dup_val = gf_strdup (value); - if (!dup_val) + int ret = -1; + char *dup_val = NULL; + char *addr_tok = NULL; + char *save_ptr = NULL; + char *entry = NULL; + char *entry_ptr = NULL; + char *dir_and_addr = NULL; + char *addr_ptr = NULL; + char *addr_list = NULL; + char *addr = NULL; + char *dir = NULL; + char errstr[4096] = { + 0, + }; + + dup_val = gf_strdup(value); + if (!dup_val) + goto out; + + if (dup_val[0] != '/' && !strchr(dup_val, '(')) { + /* Possible old format, handle it for back-ward compatibility */ + addr_tok = strtok_r(dup_val, ",", &save_ptr); + while (addr_tok) { + if (!valid_internet_address(addr_tok, _gf_true)) goto out; - if (dup_val[0] != '/' && !strchr (dup_val, '(')) { - /* Possible old format, handle it for back-ward compatibility */ - addr_tok = strtok_r (dup_val, ",", &save_ptr); - while (addr_tok) { - if (!valid_internet_address (addr_tok, _gf_true)) - goto out; + addr_tok = strtok_r(NULL, ",", &save_ptr); + } + ret = 0; + goto out; + } + + /* Lets handle the value with new format */ + entry = strtok_r(dup_val, ",", &entry_ptr); + while (entry) { + dir_and_addr = gf_strdup(entry); + if (!dir_and_addr) + goto out; + + dir = strtok_r(dir_and_addr, "(", &addr_ptr); + if (dir[0] != '/') { + /* Valid format should be starting from '/' */ + goto out; + } + /* dir = strtok_r (NULL, " =", &addr_tmp); */ + addr = strtok_r(NULL, ")", &addr_ptr); + if (!addr) + goto out; + + addr_list = gf_strdup(addr); + if (!addr_list) + goto out; - addr_tok = strtok_r (NULL, ",", &save_ptr); - } - ret = 0; + /* This format be separated by '|' */ + addr_tok = strtok_r(addr_list, "|", &save_ptr); + if (addr_tok == NULL) + goto out; + while (addr_tok) { + if (!valid_internet_address(addr_tok, _gf_true)) goto out; - } - /* Lets handle the value with new format */ - entry = strtok_r (dup_val, ",", &entry_ptr); - while (entry) { - dir_and_addr = gf_strdup (entry); - if (!dir_and_addr) - goto out; - - dir = strtok_r (dir_and_addr, "(", &addr_ptr); - if (dir[0] != '/') { - /* Valid format should be starting from '/' */ - goto out; - } - /* dir = strtok_r (NULL, " =", &addr_tmp); */ - addr = strtok_r (NULL, ")", &addr_ptr); - if (!addr) - goto out; - - addr_list = gf_strdup (addr); - if (!addr_list) - goto out; - - /* This format be separated by '|' */ - addr_tok = strtok_r (addr_list, "|", &save_ptr); - if (addr_tok == NULL) - goto out; - while (addr_tok) { - if (!valid_internet_address (addr_tok, _gf_true)) - goto out; - - addr_tok = strtok_r (NULL, "|", &save_ptr); - } - entry = strtok_r (NULL, ",", &entry_ptr); - GF_FREE (dir_and_addr); - GF_FREE (addr_list); - addr_list = NULL; - dir_and_addr = NULL; + addr_tok = strtok_r(NULL, "|", &save_ptr); } + entry = strtok_r(NULL, ",", &entry_ptr); + GF_FREE(dir_and_addr); + GF_FREE(addr_list); + addr_list = NULL; + dir_and_addr = NULL; + } - ret = 0; + ret = 0; out: - if (ret) { - snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not " - "a valid internet-address-list", key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - if (op_errstr) - *op_errstr = gf_strdup (errstr); - } - GF_FREE (dup_val); - GF_FREE (dir_and_addr); - GF_FREE (addr_list); - return ret; + if (ret) { + snprintf(errstr, sizeof(errstr), + "option %s %s: '%s' is not " + "a valid internet-address-list", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + if (op_errstr) + *op_errstr = gf_strdup(errstr); + } + GF_FREE(dup_val); + GF_FREE(dir_and_addr); + GF_FREE(addr_list); + return ret; } static int -xlator_option_validate_mntauth (xlator_t *xl, const char *key, - const char *value, volume_option_t *opt, - char **op_errstr) +xlator_option_validate_mntauth(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - char *dup_val = NULL; - char *addr_tok = NULL; - char *save_ptr = NULL; - char errstr[4096] = {0,}; - - dup_val = gf_strdup (value); - if (!dup_val) - goto out; - - addr_tok = strtok_r (dup_val, ",", &save_ptr); - if (addr_tok == NULL) - goto out; - while (addr_tok) { - if (!valid_mount_auth_address (addr_tok)) - goto out; - - addr_tok = strtok_r (NULL, ",", &save_ptr); - } - ret = 0; + int ret = -1; + char *dup_val = NULL; + char *addr_tok = NULL; + char *save_ptr = NULL; + char errstr[4096] = { + 0, + }; + + dup_val = gf_strdup(value); + if (!dup_val) + goto out; + + addr_tok = strtok_r(dup_val, ",", &save_ptr); + if (addr_tok == NULL) + goto out; + while (addr_tok) { + if (!valid_mount_auth_address(addr_tok)) + goto out; + + addr_tok = strtok_r(NULL, ",", &save_ptr); + } + ret = 0; out: - if (ret) { - snprintf (errstr, sizeof (errstr), "option %s %s: '%s' is not " - "a valid mount-auth-address", key, value, value); - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", - errstr); - if (op_errstr) - *op_errstr = gf_strdup (errstr); - } - GF_FREE (dup_val); - - return ret; + if (ret) { + snprintf(errstr, sizeof(errstr), + "option %s %s: '%s' is not " + "a valid mount-auth-address", + key, value, value); + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, "%s", errstr); + if (op_errstr) + *op_errstr = gf_strdup(errstr); + } + GF_FREE(dup_val); + + return ret; } /*XXX: the rules to validate are as per block-size required for stripe xlator */ static int -gf_validate_size (const char *sizestr, volume_option_t *opt) +gf_validate_size(const char *sizestr, volume_option_t *opt) { - size_t value = 0; - int ret = 0; + size_t value = 0; + int ret = 0; - GF_ASSERT (opt); + GF_ASSERT(opt); - if (gf_string2bytesize_size (sizestr, &value) != 0 || - value < opt->min || - value % 512) { - ret = -1; - goto out; - } + if (gf_string2bytesize_size(sizestr, &value) != 0 || value < opt->min || + value % 512) { + ret = -1; + goto out; + } - out: - gf_msg_debug (THIS->name, 0, "Returning %d", ret); - return ret; +out: + gf_msg_debug(THIS->name, 0, "Returning %d", ret); + return ret; } static int -gf_validate_number (const char *numstr, volume_option_t *opt) +gf_validate_number(const char *numstr, volume_option_t *opt) { - int32_t value; - return gf_string2int32 (numstr, &value); + int32_t value; + return gf_string2int32(numstr, &value); } /* Parses the string to be of the form <key1>:<value1>,<key2>:<value2>... * * takes two optional validaters key_validator and value_validator */ static int -validate_list_elements (const char *string, volume_option_t *opt, - int (key_validator)( const char *), - int (value_validator)( const char *, volume_option_t *)) +validate_list_elements(const char *string, volume_option_t *opt, + int(key_validator)(const char *), + int(value_validator)(const char *, volume_option_t *)) { - - char *dup_string = NULL; - char *str_sav = NULL; - char *substr_sav = NULL; - char *str_ptr = NULL; - char *key = NULL; - char *value = NULL; - int ret = 0; - - GF_ASSERT (string); - - dup_string = gf_strdup (string); - if (NULL == dup_string) - goto out; - - str_ptr = strtok_r (dup_string, ",", &str_sav); - if (str_ptr == NULL) { - ret = -1; - goto out; + char *dup_string = NULL; + char *str_sav = NULL; + char *substr_sav = NULL; + char *str_ptr = NULL; + char *key = NULL; + char *value = NULL; + int ret = 0; + + GF_ASSERT(string); + + dup_string = gf_strdup(string); + if (NULL == dup_string) + goto out; + + str_ptr = strtok_r(dup_string, ",", &str_sav); + if (str_ptr == NULL) { + ret = -1; + goto out; + } + while (str_ptr) { + key = strtok_r(str_ptr, ":", &substr_sav); + if (!key || (key_validator && key_validator(key))) { + ret = -1; + gf_msg(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY, + "invalid list '%s', key " + "'%s' not valid.", + string, key); + goto out; } - while (str_ptr) { - - key = strtok_r (str_ptr, ":", &substr_sav); - if (!key || - (key_validator && key_validator(key))) { - ret = -1; - gf_msg (THIS->name, GF_LOG_WARNING, 0, - LG_MSG_INVALID_ENTRY, "invalid list '%s', key " - "'%s' not valid.", string, key); - goto out; - } - - value = strtok_r (NULL, ":", &substr_sav); - if (!value || - (value_validator && value_validator(value, opt))) { - ret = -1; - gf_msg (THIS->name, GF_LOG_WARNING, 0, - LG_MSG_INVALID_ENTRY, "invalid list '%s', " - "value '%s' not valid.", string, key); - goto out; - } - - str_ptr = strtok_r (NULL, ",", &str_sav); - substr_sav = NULL; + + value = strtok_r(NULL, ":", &substr_sav); + if (!value || (value_validator && value_validator(value, opt))) { + ret = -1; + gf_msg(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY, + "invalid list '%s', " + "value '%s' not valid.", + string, key); + goto out; } - out: - GF_FREE (dup_string); - gf_msg_debug (THIS->name, 0, "Returning %d", ret); - return ret; + str_ptr = strtok_r(NULL, ",", &str_sav); + substr_sav = NULL; + } + +out: + GF_FREE(dup_string); + gf_msg_debug(THIS->name, 0, "Returning %d", ret); + return ret; } static int -xlator_option_validate_priority_list (xlator_t *xl, const char *key, - const char *value, volume_option_t *opt, - char **op_errstr) +xlator_option_validate_priority_list(xlator_t *xl, const char *key, + const char *value, volume_option_t *opt, + char **op_errstr) { - int ret =0; - char errstr[1024] = {0, }; - - GF_ASSERT (value); - - ret = validate_list_elements (value, opt, NULL, &gf_validate_number); - if (ret) { - snprintf (errstr, 1024, - "option %s %s: '%s' is not a valid " - "priority-list", key, value, value); - *op_errstr = gf_strdup (errstr); - } - - return ret; + int ret = 0; + char errstr[1024] = { + 0, + }; + + GF_ASSERT(value); + + ret = validate_list_elements(value, opt, NULL, &gf_validate_number); + if (ret) { + snprintf(errstr, 1024, + "option %s %s: '%s' is not a valid " + "priority-list", + key, value, value); + *op_errstr = gf_strdup(errstr); + } + + return ret; } static int -xlator_option_validate_size_list (xlator_t *xl, const char *key, - const char *value, volume_option_t *opt, - char **op_errstr) +xlator_option_validate_size_list(xlator_t *xl, const char *key, + const char *value, volume_option_t *opt, + char **op_errstr) { - - int ret = 0; - char errstr[1024] = {0, }; - - GF_ASSERT (value); - - ret = gf_validate_size (value, opt); - if (ret) - ret = validate_list_elements (value, opt, NULL, &gf_validate_size); - - if (ret) { - snprintf (errstr, 1024, - "option %s %s: '%s' is not a valid " - "size-list", key, value, value); - *op_errstr = gf_strdup (errstr); - } - - return ret; - + int ret = 0; + char errstr[1024] = { + 0, + }; + + GF_ASSERT(value); + + ret = gf_validate_size(value, opt); + if (ret) + ret = validate_list_elements(value, opt, NULL, &gf_validate_size); + + if (ret) { + snprintf(errstr, 1024, + "option %s %s: '%s' is not a valid " + "size-list", + key, value, value); + *op_errstr = gf_strdup(errstr); + } + + return ret; } static int -xlator_option_validate_any (xlator_t *xl, const char *key, const char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate_any(xlator_t *xl, const char *key, const char *value, + volume_option_t *opt, char **op_errstr) { - return 0; + return 0; } -typedef int (xlator_option_validator_t) (xlator_t *xl, const char *key, - const char *value, - volume_option_t *opt, char **operrstr); +typedef int(xlator_option_validator_t)(xlator_t *xl, const char *key, + const char *value, volume_option_t *opt, + char **operrstr); int -xlator_option_validate (xlator_t *xl, char *key, char *value, - volume_option_t *opt, char **op_errstr) +xlator_option_validate(xlator_t *xl, char *key, char *value, + volume_option_t *opt, char **op_errstr) { - int ret = -1; - xlator_option_validator_t *validate; - xlator_option_validator_t *validators[] = { - [GF_OPTION_TYPE_PATH] = xlator_option_validate_path, - [GF_OPTION_TYPE_INT] = xlator_option_validate_int, - [GF_OPTION_TYPE_SIZET] = xlator_option_validate_sizet, - [GF_OPTION_TYPE_BOOL] = xlator_option_validate_bool, - [GF_OPTION_TYPE_XLATOR] = xlator_option_validate_xlator, - [GF_OPTION_TYPE_STR] = xlator_option_validate_str, - [GF_OPTION_TYPE_PERCENT] = xlator_option_validate_percent, - [GF_OPTION_TYPE_PERCENT_OR_SIZET] = - xlator_option_validate_percent_or_sizet, - [GF_OPTION_TYPE_TIME] = xlator_option_validate_time, - [GF_OPTION_TYPE_DOUBLE] = xlator_option_validate_double, - [GF_OPTION_TYPE_INTERNET_ADDRESS] = xlator_option_validate_addr, - [GF_OPTION_TYPE_INTERNET_ADDRESS_LIST] = - xlator_option_validate_addr_list, - [GF_OPTION_TYPE_PRIORITY_LIST] = - xlator_option_validate_priority_list, - [GF_OPTION_TYPE_SIZE_LIST] = xlator_option_validate_size_list, - [GF_OPTION_TYPE_ANY] = xlator_option_validate_any, - [GF_OPTION_TYPE_CLIENT_AUTH_ADDR] = xlator_option_validate_mntauth, - [GF_OPTION_TYPE_MAX] = NULL, - }; - - if (opt->type > GF_OPTION_TYPE_MAX) { - gf_msg (xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, - "unknown option type '%d'", opt->type); - goto out; - } - - validate = validators[opt->type]; - - ret = validate (xl, key, value, opt, op_errstr); + int ret = -1; + xlator_option_validator_t *validate; + xlator_option_validator_t *validators[] = { + [GF_OPTION_TYPE_PATH] = xlator_option_validate_path, + [GF_OPTION_TYPE_INT] = xlator_option_validate_int, + [GF_OPTION_TYPE_SIZET] = xlator_option_validate_sizet, + [GF_OPTION_TYPE_BOOL] = xlator_option_validate_bool, + [GF_OPTION_TYPE_XLATOR] = xlator_option_validate_xlator, + [GF_OPTION_TYPE_STR] = xlator_option_validate_str, + [GF_OPTION_TYPE_PERCENT] = xlator_option_validate_percent, + [GF_OPTION_TYPE_PERCENT_OR_SIZET] = + xlator_option_validate_percent_or_sizet, + [GF_OPTION_TYPE_TIME] = xlator_option_validate_time, + [GF_OPTION_TYPE_DOUBLE] = xlator_option_validate_double, + [GF_OPTION_TYPE_INTERNET_ADDRESS] = xlator_option_validate_addr, + [GF_OPTION_TYPE_INTERNET_ADDRESS_LIST] = + xlator_option_validate_addr_list, + [GF_OPTION_TYPE_PRIORITY_LIST] = xlator_option_validate_priority_list, + [GF_OPTION_TYPE_SIZE_LIST] = xlator_option_validate_size_list, + [GF_OPTION_TYPE_ANY] = xlator_option_validate_any, + [GF_OPTION_TYPE_CLIENT_AUTH_ADDR] = xlator_option_validate_mntauth, + [GF_OPTION_TYPE_MAX] = NULL, + }; + + if (opt->type > GF_OPTION_TYPE_MAX) { + gf_msg(xl->name, GF_LOG_ERROR, 0, LG_MSG_INVALID_ENTRY, + "unknown option type '%d'", opt->type); + goto out; + } + + validate = validators[opt->type]; + + ret = validate(xl, key, value, opt, op_errstr); out: - return ret; + return ret; } - volume_option_t * -xlator_volume_option_get_list (volume_opt_list_t *vol_list, const char *key) +xlator_volume_option_get_list(volume_opt_list_t *vol_list, const char *key) { - volume_option_t *opt = NULL; - volume_opt_list_t *opt_list = NULL; - volume_option_t *found = NULL; - int index = 0; - int i = 0; - char *cmp_key = NULL; - - if (!vol_list->given_opt) { - opt_list = list_entry (vol_list->list.next, volume_opt_list_t, - list); - opt = opt_list->given_opt; - } else - opt = vol_list->given_opt; - - for (index = 0; opt[index].key[0]; index++) { - for (i = 0; i < ZR_VOLUME_MAX_NUM_KEY; i++) { - cmp_key = opt[index].key[i]; - if (!cmp_key) - break; - if (fnmatch (cmp_key, key, FNM_NOESCAPE) == 0) { - found = &opt[index]; - goto out; - } - } + volume_option_t *opt = NULL; + volume_opt_list_t *opt_list = NULL; + volume_option_t *found = NULL; + int index = 0; + int i = 0; + char *cmp_key = NULL; + + if (!vol_list->given_opt) { + opt_list = list_entry(vol_list->list.next, volume_opt_list_t, list); + opt = opt_list->given_opt; + } else + opt = vol_list->given_opt; + + for (index = 0; opt[index].key[0]; index++) { + for (i = 0; i < ZR_VOLUME_MAX_NUM_KEY; i++) { + cmp_key = opt[index].key[i]; + if (!cmp_key) + break; + if (fnmatch(cmp_key, key, FNM_NOESCAPE) == 0) { + found = &opt[index]; + goto out; + } } + } out: - return found; + return found; } - volume_option_t * -xlator_volume_option_get (xlator_t *xl, const char *key) +xlator_volume_option_get(xlator_t *xl, const char *key) { - volume_opt_list_t *vol_list = NULL; - volume_option_t *found = NULL; + volume_opt_list_t *vol_list = NULL; + volume_option_t *found = NULL; - list_for_each_entry (vol_list, &xl->volume_options, list) { - found = xlator_volume_option_get_list (vol_list, key); - if (found) - break; - } + list_for_each_entry(vol_list, &xl->volume_options, list) + { + found = xlator_volume_option_get_list(vol_list, key); + if (found) + break; + } - return found; + return found; } - static int -xl_opt_validate (dict_t *dict, char *key, data_t *value, void *data) +xl_opt_validate(dict_t *dict, char *key, data_t *value, void *data) { - xlator_t *xl = NULL; - volume_opt_list_t *vol_opt = NULL; - volume_option_t *opt = NULL; - int ret = 0; - char *errstr = NULL; - - struct { - xlator_t *this; - volume_opt_list_t *vol_opt; - char *errstr; - } *stub; - - stub = data; - xl = stub->this; - vol_opt = stub->vol_opt; - - opt = xlator_volume_option_get_list (vol_opt, key); - if (!opt) - return 0; - - ret = xlator_option_validate (xl, key, value->data, opt, &errstr); - if (ret) - gf_msg (xl->name, GF_LOG_WARNING, 0, LG_MSG_VALIDATE_RETURNS, - "validate of %s returned %d", key, ret); - - if (errstr) - /* possible small leak of previously set stub->errstr */ - stub->errstr = errstr; - - if (fnmatch (opt->key[0], key, FNM_NOESCAPE) != 0) { - gf_msg (xl->name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY, - "option '%s' is deprecated, preferred is '%s', " - "continuing with correction", key, opt->key[0]); - dict_set (dict, opt->key[0], value); - dict_del (dict, key); - } + xlator_t *xl = NULL; + volume_opt_list_t *vol_opt = NULL; + volume_option_t *opt = NULL; + int ret = 0; + char *errstr = NULL; + + struct { + xlator_t *this; + volume_opt_list_t *vol_opt; + char *errstr; + } * stub; + + stub = data; + xl = stub->this; + vol_opt = stub->vol_opt; + + opt = xlator_volume_option_get_list(vol_opt, key); + if (!opt) return 0; -} + ret = xlator_option_validate(xl, key, value->data, opt, &errstr); + if (ret) + gf_msg(xl->name, GF_LOG_WARNING, 0, LG_MSG_VALIDATE_RETURNS, + "validate of %s returned %d", key, ret); + + if (errstr) + /* possible small leak of previously set stub->errstr */ + stub->errstr = errstr; + + if (fnmatch(opt->key[0], key, FNM_NOESCAPE) != 0) { + gf_msg(xl->name, GF_LOG_WARNING, 0, LG_MSG_INVALID_ENTRY, + "option '%s' is deprecated, preferred is '%s', " + "continuing with correction", + key, opt->key[0]); + dict_set(dict, opt->key[0], value); + dict_del(dict, key); + } + return 0; +} int -xlator_options_validate_list (xlator_t *xl, dict_t *options, - volume_opt_list_t *vol_opt, char **op_errstr) +xlator_options_validate_list(xlator_t *xl, dict_t *options, + volume_opt_list_t *vol_opt, char **op_errstr) { - int ret = 0; - struct { - xlator_t *this; - volume_opt_list_t *vol_opt; - char *errstr; - } stub; - - stub.this = xl; - stub.vol_opt = vol_opt; - stub.errstr = NULL; - - dict_foreach (options, xl_opt_validate, &stub); - if (stub.errstr) { - ret = -1; - if (op_errstr) - *op_errstr = stub.errstr; - } - - return ret; + int ret = 0; + struct { + xlator_t *this; + volume_opt_list_t *vol_opt; + char *errstr; + } stub; + + stub.this = xl; + stub.vol_opt = vol_opt; + stub.errstr = NULL; + + dict_foreach(options, xl_opt_validate, &stub); + if (stub.errstr) { + ret = -1; + if (op_errstr) + *op_errstr = stub.errstr; + } + + return ret; } - int -xlator_options_validate (xlator_t *xl, dict_t *options, char **op_errstr) +xlator_options_validate(xlator_t *xl, dict_t *options, char **op_errstr) { - int ret = 0; - volume_opt_list_t *vol_opt = NULL; - - - if (!xl) { - gf_msg_debug (THIS->name, 0, "'this' not a valid ptr"); - ret = -1; - goto out; - } - - if (list_empty (&xl->volume_options)) - goto out; - - list_for_each_entry (vol_opt, &xl->volume_options, list) { - ret = xlator_options_validate_list (xl, options, vol_opt, - op_errstr); - } + int ret = 0; + volume_opt_list_t *vol_opt = NULL; + + if (!xl) { + gf_msg_debug(THIS->name, 0, "'this' not a valid ptr"); + ret = -1; + goto out; + } + + if (list_empty(&xl->volume_options)) + goto out; + + list_for_each_entry(vol_opt, &xl->volume_options, list) + { + ret = xlator_options_validate_list(xl, options, vol_opt, op_errstr); + } out: - return ret; + return ret; } - int -xlator_validate_rec (xlator_t *xlator, char **op_errstr) +xlator_validate_rec(xlator_t *xlator, char **op_errstr) { - int ret = -1; - xlator_list_t *trav = NULL; - xlator_t *old_THIS = NULL; - - GF_VALIDATE_OR_GOTO ("xlator", xlator, out); + int ret = -1; + xlator_list_t *trav = NULL; + xlator_t *old_THIS = NULL; - trav = xlator->children; + GF_VALIDATE_OR_GOTO("xlator", xlator, out); - while (trav) { - if (xlator_validate_rec (trav->xlator, op_errstr)) { - gf_msg ("xlator", GF_LOG_WARNING, 0, - LG_MSG_VALIDATE_REC_FAILED, "validate_rec " - "failed"); - goto out; - } + trav = xlator->children; - trav = trav->next; + while (trav) { + if (xlator_validate_rec(trav->xlator, op_errstr)) { + gf_msg("xlator", GF_LOG_WARNING, 0, LG_MSG_VALIDATE_REC_FAILED, + "validate_rec " + "failed"); + goto out; } - if (xlator_dynload (xlator)) - gf_msg_debug (xlator->name, 0, "Did not load the symbols"); + trav = trav->next; + } - old_THIS = THIS; - THIS = xlator; + if (xlator_dynload(xlator)) + gf_msg_debug(xlator->name, 0, "Did not load the symbols"); - /* Need this here, as this graph has not yet called init() */ - if (!xlator->mem_acct) { - if (!xlator->mem_acct_init) - xlator->mem_acct_init = default_mem_acct_init; - xlator->mem_acct_init (xlator); - } + old_THIS = THIS; + THIS = xlator; - ret = xlator_options_validate (xlator, xlator->options, op_errstr); - THIS = old_THIS; + /* Need this here, as this graph has not yet called init() */ + if (!xlator->mem_acct) { + if (!xlator->mem_acct_init) + xlator->mem_acct_init = default_mem_acct_init; + xlator->mem_acct_init(xlator); + } - if (ret) { - gf_msg (xlator->name, GF_LOG_INFO, 0, LG_MSG_INVALID_ENTRY, - "%s", *op_errstr); - goto out; - } + ret = xlator_options_validate(xlator, xlator->options, op_errstr); + THIS = old_THIS; - gf_msg_debug (xlator->name, 0, "Validated options"); + if (ret) { + gf_msg(xlator->name, GF_LOG_INFO, 0, LG_MSG_INVALID_ENTRY, "%s", + *op_errstr); + goto out; + } - ret = 0; + gf_msg_debug(xlator->name, 0, "Validated options"); + + ret = 0; out: - return ret; + return ret; } - int -graph_reconf_validateopt (glusterfs_graph_t *graph, char **op_errstr) +graph_reconf_validateopt(glusterfs_graph_t *graph, char **op_errstr) { - xlator_t *xlator = NULL; - int ret = -1; + xlator_t *xlator = NULL; + int ret = -1; - GF_ASSERT (graph); + GF_ASSERT(graph); - xlator = graph->first; + xlator = graph->first; - ret = xlator_validate_rec (xlator, op_errstr); + ret = xlator_validate_rec(xlator, op_errstr); - return ret; + return ret; } - static int -xlator_reconfigure_rec (xlator_t *old_xl, xlator_t *new_xl) +xlator_reconfigure_rec(xlator_t *old_xl, xlator_t *new_xl) { - xlator_list_t *trav1 = NULL; - xlator_list_t *trav2 = NULL; - int32_t ret = -1; - xlator_t *old_THIS = NULL; + xlator_list_t *trav1 = NULL; + xlator_list_t *trav2 = NULL; + int32_t ret = -1; + xlator_t *old_THIS = NULL; - GF_VALIDATE_OR_GOTO ("xlator", old_xl, out); - GF_VALIDATE_OR_GOTO ("xlator", new_xl, out); + GF_VALIDATE_OR_GOTO("xlator", old_xl, out); + GF_VALIDATE_OR_GOTO("xlator", new_xl, out); - trav1 = old_xl->children; - trav2 = new_xl->children; + trav1 = old_xl->children; + trav2 = new_xl->children; - while (trav1 && trav2) { - ret = xlator_reconfigure_rec (trav1->xlator, trav2->xlator); - if (ret) - goto out; + while (trav1 && trav2) { + ret = xlator_reconfigure_rec(trav1->xlator, trav2->xlator); + if (ret) + goto out; - gf_msg_debug (trav1->xlator->name, 0, "reconfigured"); + gf_msg_debug(trav1->xlator->name, 0, "reconfigured"); - trav1 = trav1->next; - trav2 = trav2->next; - } + trav1 = trav1->next; + trav2 = trav2->next; + } - if (old_xl->reconfigure) { - old_THIS = THIS; - THIS = old_xl; + if (old_xl->reconfigure) { + old_THIS = THIS; + THIS = old_xl; - xlator_init_lock (); - ret = old_xl->reconfigure (old_xl, new_xl->options); - xlator_init_unlock (); + xlator_init_lock(); + ret = old_xl->reconfigure(old_xl, new_xl->options); + xlator_init_unlock(); - THIS = old_THIS; + THIS = old_THIS; - if (ret) - goto out; - } else { - gf_msg_debug (old_xl->name, 0, "No reconfigure() found"); - } + if (ret) + goto out; + } else { + gf_msg_debug(old_xl->name, 0, "No reconfigure() found"); + } - ret = 0; + ret = 0; out: - return ret; + return ret; } - int -xlator_tree_reconfigure (xlator_t *old_xl, xlator_t *new_xl) +xlator_tree_reconfigure(xlator_t *old_xl, xlator_t *new_xl) { - xlator_t *new_top = NULL; - xlator_t *old_top = NULL; + xlator_t *new_top = NULL; + xlator_t *old_top = NULL; - GF_ASSERT (old_xl); - GF_ASSERT (new_xl); + GF_ASSERT(old_xl); + GF_ASSERT(new_xl); - old_top = old_xl; - new_top = new_xl; + old_top = old_xl; + new_top = new_xl; - return xlator_reconfigure_rec (old_top, new_top); + return xlator_reconfigure_rec(old_top, new_top); } - int -xlator_option_info_list (volume_opt_list_t *list, char *key, - char **def_val, char **descr) +xlator_option_info_list(volume_opt_list_t *list, char *key, char **def_val, + char **descr) { - int ret = -1; - volume_option_t *opt = NULL; + int ret = -1; + volume_option_t *opt = NULL; + opt = xlator_volume_option_get_list(list, key); + if (!opt) + goto out; - opt = xlator_volume_option_get_list (list, key); - if (!opt) - goto out; - - if (def_val) - *def_val = opt->default_value; - if (descr) - *descr = opt->description; + if (def_val) + *def_val = opt->default_value; + if (descr) + *descr = opt->description; - ret = 0; + ret = 0; out: - return ret; + return ret; } - static int -pass (char *in, char **out) +pass(char *in, char **out) { - *out = in; - return 0; + *out = in; + return 0; } - static int -xl_by_name (char *in, xlator_t **out) +xl_by_name(char *in, xlator_t **out) { - xlator_t *xl = NULL; + xlator_t *xl = NULL; - xl = xlator_search_by_name (THIS, in); + xl = xlator_search_by_name(THIS, in); - if (!xl) - return -1; - *out = xl; - return 0; + if (!xl) + return -1; + *out = xl; + return 0; } - static int -pc_or_size (char *in, double *out) +pc_or_size(char *in, double *out) { - double pc = 0; - int ret = 0; - size_t size = 0; - - if (gf_string2percent (in, &pc) == 0) { - if (pc > 100.0) { - ret = gf_string2bytesize_size (in, &size); - if (!ret) - *out = size; - } else { - *out = pc; - } + double pc = 0; + int ret = 0; + size_t size = 0; + + if (gf_string2percent(in, &pc) == 0) { + if (pc > 100.0) { + ret = gf_string2bytesize_size(in, &size); + if (!ret) + *out = size; } else { - ret = gf_string2bytesize_size (in, &size); - if (!ret) - *out = size; + *out = pc; } - return ret; + } else { + ret = gf_string2bytesize_size(in, &size); + if (!ret) + *out = size; + } + return ret; } DEFINE_INIT_OPT(char *, str, pass); @@ -1265,7 +1233,6 @@ DEFINE_INIT_OPT(char *, path, pass); DEFINE_INIT_OPT(double, double, gf_string2double); DEFINE_INIT_OPT(uint32_t, time, gf_string2time); - DEFINE_RECONF_OPT(char *, str, pass); DEFINE_RECONF_OPT(uint64_t, uint64, gf_string2uint64); DEFINE_RECONF_OPT(int64_t, int64, gf_string2int64); |