From 174d57666b3ff44b3794a623fc1156f1177969f2 Mon Sep 17 00:00:00 2001 From: Vftdan Date: Fri, 16 Aug 2024 11:56:04 +0200 Subject: [PATCH] Allow passing fallback value for constant resolution --- config.c | 13 ++++++++----- config.h | 8 +++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/config.c b/config.c index 21a3aa2..7852d91 100644 --- a/config.c +++ b/config.c @@ -195,21 +195,24 @@ reset_config(FullConfig *config) } long long -resolve_constant(const ConstantRegistry * registry, const config_setting_t * setting) +resolve_constant_or(const ConstantRegistry * registry, const config_setting_t * setting, long long dflt) { if (!setting) { - return 0; + return dflt; } if (config_setting_type(setting) == CONFIG_TYPE_STRING) { if (!registry) { - return 1; + return dflt; } const char *name = config_setting_get_string(setting); HashTableIndex idx = hash_table_find(registry, hash_table_key_from_cstr(name)); if (idx < 0) { - return 0; + return dflt; } return registry->value_array[idx]; } - return config_setting_get_int64(setting); + if (config_setting_is_number(setting)) { + return config_setting_get_int64(setting); + } + return dflt; } diff --git a/config.h b/config.h index 5083cd8..3aff11f 100644 --- a/config.h +++ b/config.h @@ -38,6 +38,12 @@ typedef struct { bool load_config(const config_setting_t *config_root, FullConfig *config); void reset_config(FullConfig *config); -long long resolve_constant(const ConstantRegistry * registry, const config_setting_t * setting); +long long resolve_constant_or(const ConstantRegistry * registry, const config_setting_t * setting, long long dflt); + +__attribute__((unused)) inline static long long +resolve_constant(const ConstantRegistry * registry, const config_setting_t * setting) +{ + return resolve_constant_or(registry, setting, 0); +} #endif /* end of include guard: CONFIG_H_ */