settings: Allow empty strings in section key

This commit is contained in:
Tobias Brunner
2014-02-12 14:34:32 +01:00
parent 9f9a6b0681
commit 25ee33ba65
2 changed files with 33 additions and 23 deletions
@@ -77,6 +77,8 @@ END_TEARDOWN
START_TEST(test_get_str)
{
verify_string("val1", "main.key1");
verify_string("val1", "main..key1");
verify_string("val1", ".main.key1");
verify_string("with spaces", "main.key2");
verify_string("value", "main.sub1.key");
verify_string("value2", "main.sub1.key2");
+31 -23
View File
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2010 Tobias Brunner
* Copyright (C) 2010-2014 Tobias Brunner
* Copyright (C) 2008 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -251,9 +251,13 @@ static section_t *find_section_buffered(section_t *section,
{
return NULL;
}
if (section->sections->find_first(section->sections,
(linked_list_match_t)section_find,
(void**)&found, buf) != SUCCESS)
if (!strlen(buf))
{
found = section;
}
else if (section->sections->find_first(section->sections,
(linked_list_match_t)section_find,
(void**)&found, buf) != SUCCESS)
{
if (ensure)
{
@@ -336,9 +340,13 @@ static kv_t *find_value_buffered(section_t *section, char *start, char *key,
{
return NULL;
}
if (section->sections->find_first(section->sections,
(linked_list_match_t)section_find,
(void**)&found, buf) != SUCCESS)
if (!strlen(buf))
{
found = section;
}
else if (section->sections->find_first(section->sections,
(linked_list_match_t)section_find,
(void**)&found, buf) != SUCCESS)
{
if (!ensure)
{
@@ -429,7 +437,7 @@ static void set_value(private_settings_t *this, section_t *section,
}
METHOD(settings_t, get_str, char*,
private_settings_t *this, char *key, char *def, ...)
private_settings_t *this, char *key, char *def, ...)
{
char *value;
va_list args;
@@ -470,7 +478,7 @@ inline bool settings_value_as_bool(char *value, bool def)
}
METHOD(settings_t, get_bool, bool,
private_settings_t *this, char *key, bool def, ...)
private_settings_t *this, char *key, bool def, ...)
{
char *value;
va_list args;
@@ -500,7 +508,7 @@ inline int settings_value_as_int(char *value, int def)
}
METHOD(settings_t, get_int, int,
private_settings_t *this, char *key, int def, ...)
private_settings_t *this, char *key, int def, ...)
{
char *value;
va_list args;
@@ -530,7 +538,7 @@ inline double settings_value_as_double(char *value, double def)
}
METHOD(settings_t, get_double, double,
private_settings_t *this, char *key, double def, ...)
private_settings_t *this, char *key, double def, ...)
{
char *value;
va_list args;
@@ -576,7 +584,7 @@ inline u_int32_t settings_value_as_time(char *value, u_int32_t def)
}
METHOD(settings_t, get_time, u_int32_t,
private_settings_t *this, char *key, u_int32_t def, ...)
private_settings_t *this, char *key, u_int32_t def, ...)
{
char *value;
va_list args;
@@ -588,7 +596,7 @@ METHOD(settings_t, get_time, u_int32_t,
}
METHOD(settings_t, set_str, void,
private_settings_t *this, char *key, char *value, ...)
private_settings_t *this, char *key, char *value, ...)
{
va_list args;
va_start(args, value);
@@ -597,7 +605,7 @@ METHOD(settings_t, set_str, void,
}
METHOD(settings_t, set_bool, void,
private_settings_t *this, char *key, bool value, ...)
private_settings_t *this, char *key, bool value, ...)
{
va_list args;
va_start(args, value);
@@ -606,7 +614,7 @@ METHOD(settings_t, set_bool, void,
}
METHOD(settings_t, set_int, void,
private_settings_t *this, char *key, int value, ...)
private_settings_t *this, char *key, int value, ...)
{
char val[16];
va_list args;
@@ -619,7 +627,7 @@ METHOD(settings_t, set_int, void,
}
METHOD(settings_t, set_double, void,
private_settings_t *this, char *key, double value, ...)
private_settings_t *this, char *key, double value, ...)
{
char val[64];
va_list args;
@@ -632,7 +640,7 @@ METHOD(settings_t, set_double, void,
}
METHOD(settings_t, set_time, void,
private_settings_t *this, char *key, u_int32_t value, ...)
private_settings_t *this, char *key, u_int32_t value, ...)
{
char val[16];
va_list args;
@@ -645,7 +653,7 @@ METHOD(settings_t, set_time, void,
}
METHOD(settings_t, set_default_str, bool,
private_settings_t *this, char *key, char *value, ...)
private_settings_t *this, char *key, char *value, ...)
{
char *old;
va_list args;
@@ -674,7 +682,7 @@ static bool section_filter(void *null, section_t **in, char **out)
}
METHOD(settings_t, create_section_enumerator, enumerator_t*,
private_settings_t *this, char *key, ...)
private_settings_t *this, char *key, ...)
{
section_t *section;
va_list args;
@@ -705,7 +713,7 @@ static bool kv_filter(void *null, kv_t **in, char **key,
}
METHOD(settings_t, create_key_value_enumerator, enumerator_t*,
private_settings_t *this, char *key, ...)
private_settings_t *this, char *key, ...)
{
section_t *section;
va_list args;
@@ -1179,13 +1187,13 @@ static bool load_files_internal(private_settings_t *this, section_t *parent,
}
METHOD(settings_t, load_files, bool,
private_settings_t *this, char *pattern, bool merge)
private_settings_t *this, char *pattern, bool merge)
{
return load_files_internal(this, this->top, pattern, merge);
}
METHOD(settings_t, load_files_section, bool,
private_settings_t *this, char *pattern, bool merge, char *key, ...)
private_settings_t *this, char *pattern, bool merge, char *key, ...)
{
section_t *section;
va_list args;
@@ -1202,7 +1210,7 @@ METHOD(settings_t, load_files_section, bool,
}
METHOD(settings_t, destroy, void,
private_settings_t *this)
private_settings_t *this)
{
section_destroy(this->top);
this->contents->destroy_function(this->contents, (void*)free);