Config type for 'words' and some tests

This commit is contained in:
Christian Thaeter 2008-08-10 11:52:24 +02:00
parent cd8b523550
commit cf3c601a77
3 changed files with 115 additions and 6 deletions

View file

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

View file

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

View file

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