diff options
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/dict.c | 61 | ||||
| -rw-r--r-- | libglusterfs/src/dict.h | 1 | 
2 files changed, 62 insertions, 0 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index b1c1a5d9495..bff17444ce3 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -2170,6 +2170,67 @@ err:  	return ret;  } + +/** + * dict_get_str_boolean - get a boolean value based on string representation. + * + * @this        : dictionary + * @key         : dictionary key queried + * @default_val : default value if key not found + * + * @return      : @default_val if key not found + *              : boolean interpretation of @this[@key] if it makes sense + *                (ie., "on", "true", "enable" ...) + *              : -1 if error occurs or @this[@key] doesn't make sens as + *                  boolean + * + *   So if you query a boolean option, then via @default_val you can choose + *   between following patterns: + * + *   - fall back to _gf_false if @key is not set  [@default_val = 0] + *   - fall back to _gf_true if @key is not set   [@default_val = 1] + *   - regard as failure if @key is not set       [@default_val = -1] + *   - handle specially (not as error) if @key is not set + *                                                [@default_val = anything else] + */ + +int +dict_get_str_boolean (dict_t *this, char *key, int default_val) +{ +        data_t       *data = NULL; +        gf_boolean_t  boo = _gf_false; +        int           ret  = 0; + +        ret = dict_get_with_ref (this, key, &data); +        if (ret < 0) { +                if (ret == -ENOENT) +                        ret = default_val; +                else +                        ret = -1; +                goto err; +        } + +        GF_ASSERT (data); + +        if (!data->data) { +                ret = -1; +                goto err; +        } + +        ret = gf_string2boolean (data->data, &boo); +        if (ret == -1) +                goto err; + +        ret = boo; + +err: +        if (data) +                data_unref (data); + +        return ret; +} + +  /**   * Serialization format:   *  -------- --------  --------  ----------- ------------- diff --git a/libglusterfs/src/dict.h b/libglusterfs/src/dict.h index 41b6b6780cf..f5c4abd0bdc 100644 --- a/libglusterfs/src/dict.h +++ b/libglusterfs/src/dict.h @@ -185,4 +185,5 @@ GF_MUST_CHECK int dict_set_dynmstr (dict_t *this, char *key, char *str);  GF_MUST_CHECK int dict_set_dynstr (dict_t *this, char *key, char *str);  GF_MUST_CHECK int dict_get_str (dict_t *this, char *key, char **str); +GF_MUST_CHECK int dict_get_str_boolean (dict_t *this, char *key, int default_val);  #endif  | 
