diff options
Diffstat (limited to 'libglusterfs/src/dict.c')
-rw-r--r-- | libglusterfs/src/dict.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index b1c1a5d94..bff17444c 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: * -------- -------- -------- ----------- ------------- |