lib/config: add notmuch_config_get_values_string

This is to support the less common (at least in the notmuch codebase)
case of accessing a ;-delimited list config value with an arbitrary
string key.
This commit is contained in:
David Bremner 2021-02-13 13:17:52 -04:00
parent 2fc40e24de
commit 0c6db22930
3 changed files with 49 additions and 5 deletions

View file

@ -261,13 +261,19 @@ _notmuch_config_load_from_database (notmuch_database_t *notmuch)
notmuch_config_values_t * notmuch_config_values_t *
notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key) notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key)
{ {
notmuch_config_values_t *values = NULL;
bool ok = false;
const char *key_str = _notmuch_config_key_to_string (key); const char *key_str = _notmuch_config_key_to_string (key);
if (! key_str) if (! key_str)
goto DONE; return NULL;
return notmuch_config_get_values_string (notmuch, key_str);
}
notmuch_config_values_t *
notmuch_config_get_values_string (notmuch_database_t *notmuch, const char *key_str)
{
notmuch_config_values_t *values = NULL;
bool ok = false;
values = talloc (notmuch, notmuch_config_values_t); values = talloc (notmuch, notmuch_config_values_t);
if (unlikely (! values)) if (unlikely (! values))

View file

@ -2494,7 +2494,6 @@ notmuch_config_list_move_to_next (notmuch_config_list_t *config_list);
void void
notmuch_config_list_destroy (notmuch_config_list_t *config_list); notmuch_config_list_destroy (notmuch_config_list_t *config_list);
/** /**
* Configuration keys known to libnotmuch * Configuration keys known to libnotmuch
*/ */
@ -2565,6 +2564,22 @@ notmuch_config_set (notmuch_database_t *notmuch, notmuch_config_key_t key, const
notmuch_config_values_t * notmuch_config_values_t *
notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key); notmuch_config_get_values (notmuch_database_t *notmuch, notmuch_config_key_t key);
/**
* Returns an iterator for a ';'-delimited list of configuration values
*
* These values reflect all configuration information given at the
* time the database was opened.
*
* @param[in] notmuch database
* @param[in] key configuration key
*
* @since libnotmuch 5.4 (notmuch 0.32)
*
* @retval NULL in case of error.
*/
notmuch_config_values_t *
notmuch_config_get_values_string (notmuch_database_t *notmuch, const char *key);
/** /**
* Is the given 'config_values' iterator pointing at a valid element. * Is the given 'config_values' iterator pointing at a valid element.
* *

View file

@ -255,6 +255,29 @@ EOF
test_expect_equal_file EXPECTED OUTPUT test_expect_equal_file EXPECTED OUTPUT
restore_database restore_database
test_begin_subtest "notmuch_config_get_values_string"
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
{
notmuch_config_values_t *values;
EXPECT0(notmuch_database_set_config (db, "test.list", "x;y;z"));
for (values = notmuch_config_get_values_string (db, "test.list");
notmuch_config_values_valid (values);
notmuch_config_values_move_to_next (values))
{
puts (notmuch_config_values_get (values));
}
}
EOF
cat <<'EOF' >EXPECTED
== stdout ==
x
y
z
== stderr ==
EOF
test_expect_equal_file EXPECTED OUTPUT
restore_database
test_begin_subtest "notmuch_config_get_values (restart)" test_begin_subtest "notmuch_config_get_values (restart)"
cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL% cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
{ {