high level getter for 'number' type

WIP: doesn't register the default yet, no configfiles yet

just returning env overrides or defaults
This commit is contained in:
Christian Thaeter 2008-08-07 11:43:06 +02:00
parent 418231219a
commit 962bceec72
5 changed files with 133 additions and 8 deletions

View file

@ -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 */

View file

@ -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//

View file

@ -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

View file

@ -34,10 +34,66 @@ PLANNED "complex saving user file" <<END
END
PLANNED "TYPE get" <<END
TEST "number get" number_get <<END
out: 1234567890
END
export LUMIERA_TEST_NUMBER_1=987654321
TEST "number get, env override" number_get <<END
out: 987654321
END
export LUMIERA_TEST_NUMBER_1=barf
TEST "number get, type error" number_get_nodefault <<END
out: LUMIERA_ERROR_CONFIG_TYPE:value has wrong type
END
unset LUMIERA_TEST_NUMBER_1
PLANNED "number get, syntax error" number_get <<END
END
PLANNED "TYPE set" <<END
PLANNED "number get, default" number_get <<END
END
PLANNED "number get, no default" number_get <<END
END
PLANNED "number set" <<END
END
PLANNED "real get" <<END
END
PLANNED "real set" <<END
END
PLANNED "string get" <<END
END
PLANNED "string set" <<END
END
PLANNED "word get" <<END
END
PLANNED "word set" <<END
END
PLANNED "bool get" <<END
END
PLANNED "bool set" <<END
END

View file

@ -34,4 +34,34 @@ TEST ("init")
printf ("destroyed\n");
}
TEST ("number_get")
{
lumiera_config_init ("./");
long long number = 0;
if (!lumiera_config_number_get ("test.number.1", &number, "1234567890 # comment"))
printf ("%lld\n", number);
else
printf ("%s\n", lumiera_error ());
lumiera_config_destroy ();
}
TEST ("number_get_nodefault")
{
lumiera_config_init ("./");
long long number = 0;
if (!lumiera_config_number_get ("test.number.1", &number, NULL))
printf ("%lld\n", number);
else
printf ("%s\n", lumiera_error ());
lumiera_config_destroy ();
}
TESTS_END