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:
parent
418231219a
commit
962bceec72
5 changed files with 133 additions and 8 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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//
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue