diff --git a/src/lib-sieve/sieve-settings.c b/src/lib-sieve/sieve-settings.c index d26e392d77719618480a1931ef7fc5751cdc3411..4dc8efb5014456ebc2179cdc66bb5375f5c2b486 100644 --- a/src/lib-sieve/sieve-settings.c +++ b/src/lib-sieve/sieve-settings.c @@ -102,3 +102,30 @@ bool sieve_setting_get_size_value return TRUE; } + +bool sieve_setting_get_bool_value +(struct sieve_instance *svinst, const char *setting, + bool *value_r) +{ + const char *str_value; + char *endp; + + str_value = sieve_setting_get(svinst, setting); + + if ( str_value == NULL || *str_value == '\0' ) + return FALSE; + + if ( strcasecmp(str_value, "yes" ) == 0) { + *value_r = TRUE; + return TRUE; + } + + if ( strcasecmp(str_value, "no" ) == 0) { + *value_r = FALSE; + return TRUE; + } + + sieve_sys_warning("invalid boolean value for setting '%s': '%s'", + setting, str_value); + return FALSE; +} diff --git a/src/lib-sieve/sieve-settings.h b/src/lib-sieve/sieve-settings.h index 1adb356929899b5094274d99721eb6c0097fdfdb..93507b7aa1d9189f74d5e1ee34bdaad70f556649 100644 --- a/src/lib-sieve/sieve-settings.h +++ b/src/lib-sieve/sieve-settings.h @@ -22,16 +22,17 @@ static inline const char *sieve_setting_get } bool sieve_setting_get_uint_value -(struct sieve_instance *svinst, const char *setting, - unsigned long long int *value_r); - + (struct sieve_instance *svinst, const char *setting, + unsigned long long int *value_r); bool sieve_setting_get_int_value -(struct sieve_instance *svinst, const char *setting, - long long int *value_r); - + (struct sieve_instance *svinst, const char *setting, + long long int *value_r); bool sieve_setting_get_size_value -(struct sieve_instance *svinst, const char *setting, - size_t *value_r); + (struct sieve_instance *svinst, const char *setting, + size_t *value_r); +bool sieve_setting_get_bool_value + (struct sieve_instance *svinst, const char *setting, + bool *value_r); /* * Home directory