Config type for 'words' and some tests
This commit is contained in:
parent
cd8b523550
commit
cf3c601a77
3 changed files with 115 additions and 6 deletions
|
|
@ -246,14 +246,77 @@ lumiera_config_string_set (const char* key, char** value, const char* fmt)
|
|||
|
||||
/**
|
||||
* Word
|
||||
* A single word, no quotes, nothing
|
||||
* A single word, no quotes, chopped
|
||||
*/
|
||||
|
||||
/**
|
||||
* helper function, takes a raw input string and give a tmpbuf with the word parsed back.
|
||||
*/
|
||||
static char*
|
||||
scan_word (const char* in)
|
||||
{
|
||||
/* chop leading blanks */
|
||||
in += strspn(in, " \t");
|
||||
|
||||
char* ret = lumiera_tmpbuf_strndup (in, SIZE_MAX);
|
||||
char* end = ret;
|
||||
|
||||
/* chop trailing blanks */
|
||||
while (*end != ' ' && *end != '\t')
|
||||
++end;
|
||||
|
||||
*end++ = '\0';
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
lumiera_config_word_get (const char* key, char** value, const char* def)
|
||||
{
|
||||
TRACE (config_typed);
|
||||
UNIMPLEMENTED();
|
||||
return 0;
|
||||
TRACE (config_typed, "KEY %s", key);
|
||||
|
||||
int ret = -1;
|
||||
|
||||
const char* raw_value = NULL;
|
||||
|
||||
LUMIERA_RDLOCK_SECTION (config_typed, &lumiera_global_config->lock)
|
||||
{
|
||||
if (!lumiera_config_get (key, &raw_value))
|
||||
{
|
||||
if (raw_value)
|
||||
{
|
||||
*value = scan_word (raw_value);
|
||||
|
||||
TRACE (config_typed, "RAW_VALUE %s, scanned .%s.", raw_value, *value);
|
||||
|
||||
if (*value)
|
||||
ret = 0; /* all ok */
|
||||
else if (def)
|
||||
goto try_default;
|
||||
}
|
||||
else if (def)
|
||||
{
|
||||
ret = 0;
|
||||
try_default:
|
||||
|
||||
*value = scan_word (def);
|
||||
TRACE (config_typed, "DEFAULT %s, scanned .%s.", def, *value);
|
||||
if (*value)
|
||||
{
|
||||
TODO ("register default (writelock or mutex!)");
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = -1;
|
||||
LUMIERA_ERROR_SET (config_typed, CONFIG_DEFAULT);
|
||||
}
|
||||
}
|
||||
else
|
||||
LUMIERA_ERROR_SET (config, CONFIG_NO_ENTRY);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -106,20 +106,28 @@ LUMIERA_TEST_STRING=' "quoted string "" not ignored" #comment'
|
|||
TEST "string get, quoted, escaped" string_get test.string default <<END
|
||||
out: 'quoted string " not ignored'
|
||||
END
|
||||
unset LUMIERA_TEST_STRING
|
||||
|
||||
|
||||
PLANNED "string set" <<END
|
||||
TEST "string set" string_set test.string 'foo bar' <<END
|
||||
out: 'foo bar'
|
||||
END
|
||||
|
||||
|
||||
PLANNED "word get" <<END
|
||||
export LUMIERA_TEST_WORD=' " double quote is just right'
|
||||
|
||||
TEST "word get" word_get test.word default <<END
|
||||
out: '"'
|
||||
END
|
||||
|
||||
unset LUMIERA_TEST_WORD
|
||||
|
||||
|
||||
PLANNED "word set" <<END
|
||||
END
|
||||
|
||||
|
||||
|
||||
PLANNED "bool get" <<END
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -88,4 +88,42 @@ TEST ("string_get")
|
|||
}
|
||||
|
||||
|
||||
TEST ("string_set")
|
||||
{
|
||||
REQUIRE (argv[2]);
|
||||
REQUIRE (argv[3]);
|
||||
|
||||
lumiera_config_init ("./");
|
||||
|
||||
lumiera_config_string_set (argv[2], &argv[3], NULL);
|
||||
FIXME ("handle error");
|
||||
|
||||
const char* string;
|
||||
if (!lumiera_config_get (argv[2], &string))
|
||||
printf ("'%s'\n", string);
|
||||
else
|
||||
printf ("%s, '%s'\n", lumiera_error (), string);
|
||||
|
||||
lumiera_config_destroy ();
|
||||
}
|
||||
|
||||
|
||||
TEST ("word_get")
|
||||
{
|
||||
REQUIRE (argv[2]);
|
||||
REQUIRE (argv[3]);
|
||||
|
||||
lumiera_config_init ("./");
|
||||
|
||||
char* word;
|
||||
|
||||
if (!lumiera_config_word_get (argv[2], &word, argv[3]))
|
||||
printf ("'%s'\n", word);
|
||||
else
|
||||
printf ("%s, '%s'\n", lumiera_error (), word);
|
||||
|
||||
lumiera_config_destroy ();
|
||||
}
|
||||
|
||||
|
||||
TESTS_END
|
||||
|
|
|
|||
Loading…
Reference in a new issue