From e8cc26efa4e2bb74d59e0cd00ba72408513934a7 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Wed, 10 Sep 2008 13:14:07 +0200 Subject: [PATCH] First highlevel setter, small api change * setters return LumieraConfigitem (or NULL) instead int * the config_string_set works now --- src/backend/config.c | 2 +- src/backend/config.h | 5 +++-- src/backend/config_typed.c | 25 +++++++++++++++++-------- tests/backend/test-config.c | 8 ++++---- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/backend/config.c b/src/backend/config.c index d907645dc..43a20af41 100644 --- a/src/backend/config.c +++ b/src/backend/config.c @@ -65,7 +65,7 @@ const char* lumiera_config_defaults[] = "config.formatstr.real = '= %Lg'", "config.formatstr.real.dec = '= %Lf'", "config.formatstr.real.sci = '= %Le'", - "config.formatstr.string = '=%s'", + "config.formatstr.string = '= %s'", "config.formatstr.string.dquoted = '= \"%s\"'", "config.formatstr.string.quoted = '= ''%s'''", "config.formatstr.word = '= %s'", diff --git a/src/backend/config.h b/src/backend/config.h index 494e59961..d5e1cb058 100644 --- a/src/backend/config.h +++ b/src/backend/config.h @@ -52,6 +52,7 @@ LUMIERA_ERROR_DECLARE (CONFIG_DEFAULT); //TODO: Lumiera header includes// #include "backend/config_lookup.h" +#include "backend/configitem.h" //TODO: System includes// #include @@ -229,8 +230,8 @@ LUMIERA_CONFIG_TYPES /** * */ -#define LUMIERA_CONFIG_TYPE(name, type) \ - int \ +#define LUMIERA_CONFIG_TYPE(name, type) \ + LumieraConfigitem \ lumiera_config_##name##_set (const char* key, type* value); LUMIERA_CONFIG_TYPES #undef LUMIERA_CONFIG_TYPE diff --git a/src/backend/config_typed.c b/src/backend/config_typed.c index 4c3604f82..53c8abc09 100644 --- a/src/backend/config_typed.c +++ b/src/backend/config_typed.c @@ -46,7 +46,7 @@ lumiera_config_link_get (const char* key, const char** value) return 0; } -int +LumieraConfigitem lumiera_config_link_set (const char* key, const char** value) { TRACE (config_typed); @@ -87,7 +87,7 @@ lumiera_config_number_get (const char* key, long long* value) return raw_value; } -int +LumieraConfigitem lumiera_config_number_set (const char* key, long long* value) { TRACE (config_typed); @@ -108,7 +108,7 @@ lumiera_config_real_get (const char* key, long double* value) return 0; } -int +LumieraConfigitem lumiera_config_real_set (const char* key, long double* value) { TRACE (config_typed); @@ -203,12 +203,20 @@ lumiera_config_string_get (const char* key, const char** value) return *value; } -int +LumieraConfigitem lumiera_config_string_set (const char* key, const char** value) { TRACE (config_typed); - UNIMPLEMENTED(); - return 0; + + LumieraConfigitem item = NULL; + + LUMIERA_WRLOCK_SECTION (config_typed, &lumiera_global_config->lock) + { + const char* fmt = "= %s"; TODO ("use the config system (config.format*...) to deduce the desired format for this key"); + item = lumiera_config_set (key, lumiera_tmpbuf_snprintf (SIZE_MAX, fmt, *value)); + } + + return item; } @@ -262,7 +270,7 @@ lumiera_config_word_get (const char* key, const char** value) return *value; } -int +LumieraConfigitem lumiera_config_word_set (const char* key, const char** value) { TRACE (config_typed); @@ -283,7 +291,8 @@ lumiera_config_bool_get (const char* key, int* value) return 0; } -int + +LumieraConfigitem lumiera_config_bool_set (const char* key, int* value) { TRACE (config_typed); diff --git a/tests/backend/test-config.c b/tests/backend/test-config.c index de1fdca54..88166776a 100644 --- a/tests/backend/test-config.c +++ b/tests/backend/test-config.c @@ -171,14 +171,14 @@ TEST ("string_set") lumiera_config_init ("./"); - lumiera_config_string_set (argv[2], &argv[3]); - FIXME ("handle error"); + if (!lumiera_config_string_set (argv[2], &argv[3])) + printf ("failed setting string '%s=%s': %s\n", argv[2], argv[3], lumiera_error ()); const char* string; - if (lumiera_config_get (argv[2], &string)) + if (lumiera_config_string_get (argv[2], &string)) printf ("'%s'\n", string); else - printf ("%s, '%s'\n", lumiera_error (), string); + printf ("%s\n", lumiera_error ()); lumiera_config_destroy (); }