From: Aki Tuomi Date: Thu, 16 Sep 2021 08:53:20 +0000 (+0300) Subject: lib-settings: Add settings_get_bool X-Git-Tag: 2.4.0~4734 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ff7ed5d9c9ff991a1ca7e2a5f062fcdf2d469d00;p=thirdparty%2Fdovecot%2Fcore.git lib-settings: Add settings_get_bool Parses string as boolean. Accepts yes/y/1 and no. Preferred ones are 'yes' and 'no'. --- diff --git a/src/lib-settings/settings-parser.c b/src/lib-settings/settings-parser.c index 7b63b30f25..0fb287c8ba 100644 --- a/src/lib-settings/settings-parser.c +++ b/src/lib-settings/settings-parser.c @@ -299,8 +299,8 @@ setting_define_find(const struct setting_parser_info *info, const char *key) return NULL; } -static int -get_bool(struct setting_parser_context *ctx, const char *value, bool *result_r) +int settings_get_bool(const char *value, bool *result_r, + const char **error_r) { /* FIXME: eventually we'd want to support only yes/no */ if (strcasecmp(value, "yes") == 0 || @@ -309,14 +309,23 @@ get_bool(struct setting_parser_context *ctx, const char *value, bool *result_r) else if (strcasecmp(value, "no") == 0) *result_r = FALSE; else { - ctx->error = p_strdup_printf(ctx->parser_pool, - "Invalid boolean value: %s (use yes or no)", value); + *error_r = t_strdup_printf("Invalid boolean value: %s (use yes or no)", + value); return -1; } return 0; } +static int +get_bool(struct setting_parser_context *ctx, const char *value, bool *result_r) +{ + int ret; + if ((ret = settings_get_bool(value, result_r, &ctx->error)) < 0) + ctx->error = p_strdup(ctx->parser_pool, ctx->error); + return ret; +} + static int get_uint(struct setting_parser_context *ctx, const char *value, unsigned int *result_r) diff --git a/src/lib-settings/settings-parser.h b/src/lib-settings/settings-parser.h index d7ffcb593a..21d00604d6 100644 --- a/src/lib-settings/settings-parser.h +++ b/src/lib-settings/settings-parser.h @@ -277,5 +277,7 @@ int settings_get_time_msecs(const char *str, unsigned int *msecs_r, /* Parse size string, return as bytes. */ int settings_get_size(const char *str, uoff_t *bytes_r, const char **error_r); - +/* Parse boolean string, return as boolean */ +int settings_get_bool(const char *value, bool *result_r, + const char **error_r); #endif