From 962bceec724aad50a58de396a9f8995066ce6bb4 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Thu, 7 Aug 2008 11:43:06 +0200 Subject: [PATCH] high level getter for 'number' type WIP: doesn't register the default yet, no configfiles yet just returning env overrides or defaults --- src/backend/config.c | 9 +++--- src/backend/config.h | 1 + src/backend/config_typed.c | 41 +++++++++++++++++++++++-- tests/20config.tests | 60 +++++++++++++++++++++++++++++++++++-- tests/backend/test-config.c | 30 +++++++++++++++++++ 5 files changed, 133 insertions(+), 8 deletions(-) diff --git a/src/backend/config.c b/src/backend/config.c index 0cd0e8042..a1df1fbf7 100644 --- a/src/backend/config.c +++ b/src/backend/config.c @@ -43,10 +43,11 @@ NOBUG_DEFINE_FLAG_PARENT (config, config_all); NOBUG_DEFINE_FLAG_PARENT (config_typed, config_all); NOBUG_DEFINE_FLAG_PARENT (config_file, config_all); -LUMIERA_ERROR_DEFINE (CONFIG_SYNTAX, "Syntax error in configfile"); -LUMIERA_ERROR_DEFINE (CONFIG_SYNTAX_KEY, "Syntax error in key"); -LUMIERA_ERROR_DEFINE (CONFIG_TYPE, "Config value has wrong type"); -LUMIERA_ERROR_DEFINE (CONFIG_NO_ENTRY, "No configuration found for key"); +LUMIERA_ERROR_DEFINE (CONFIG_SYNTAX, "syntax error in configfile"); +LUMIERA_ERROR_DEFINE (CONFIG_SYNTAX_KEY, "syntax error in key"); +LUMIERA_ERROR_DEFINE (CONFIG_TYPE, "value has wrong type"); +LUMIERA_ERROR_DEFINE (CONFIG_NO_ENTRY, "no configuration entry"); +LUMIERA_ERROR_DEFINE (CONFIG_DEFAULT, "illegal default value"); /* singleton config */ diff --git a/src/backend/config.h b/src/backend/config.h index 2a2b01dc7..307601ee5 100644 --- a/src/backend/config.h +++ b/src/backend/config.h @@ -45,6 +45,7 @@ LUMIERA_ERROR_DECLARE (CONFIG_SYNTAX); LUMIERA_ERROR_DECLARE (CONFIG_SYNTAX_KEY); LUMIERA_ERROR_DECLARE (CONFIG_TYPE); LUMIERA_ERROR_DECLARE (CONFIG_NO_ENTRY); +LUMIERA_ERROR_DECLARE (CONFIG_DEFAULT); //TODO: Lumiera header includes// diff --git a/src/backend/config_typed.c b/src/backend/config_typed.c index 4fbc0c1c4..bc5342e53 100644 --- a/src/backend/config_typed.c +++ b/src/backend/config_typed.c @@ -27,6 +27,7 @@ #include "backend/config.h" //TODO: internal/static forward declarations// +extern LumieraConfig lumiera_global_config; //TODO: System includes// @@ -43,8 +44,44 @@ int lumiera_config_number_get (const char* key, long long* value, const char* def) { - UNIMPLEMENTED(); - return -1; + TRACE (config_typed); + + int ret = -1; + + const char* raw_value = NULL; + + LUMIERA_RDLOCK_SECTION (config_typed, lumiera_global_config->rh, &lumiera_global_config->lock) + { + if (lumiera_config_get (key, &raw_value)) + { + /* not found, fall back to default */ + raw_value = def; + TODO ("register default, if given (writelock or mutex!)"); + } + + if (raw_value) + { + if (sscanf (raw_value, "%Li", value) == 1) + ret = 0; /* all ok */ + else + { + if (def && raw_value != def) + { + /* we have a 2nd chance, using the default */ + if (sscanf (def, "%Li", value) == 1) + ret = 0; /* all ok */ + else + LUMIERA_ERROR_SET (config_typed, CONFIG_DEFAULT); + } + else + LUMIERA_ERROR_SET (config_typed, CONFIG_TYPE); + } + } + else + LUMIERA_ERROR_SET (config, CONFIG_NO_ENTRY); + } + + return ret; } int diff --git a/tests/20config.tests b/tests/20config.tests index 060334900..341c7d3ba 100644 --- a/tests/20config.tests +++ b/tests/20config.tests @@ -34,10 +34,66 @@ PLANNED "complex saving user file" <