--- lib/config.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ lib/notmuch.h | 17 +++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/lib/config.cc b/lib/config.cc index ca7ac2a8..dd042ab2 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -31,6 +31,11 @@ struct _notmuch_config_list { char *current_val; }; +struct _notmuch_config_values { + const char *iterator; + size_t tok_len; +}; + static int _notmuch_config_list_destroy (notmuch_config_list_t *list) { @@ -232,6 +237,50 @@ notmuch_config_get (notmuch_database_t *notmuch, const char *key) { return _notmuch_string_map_get (notmuch->config, key); } +notmuch_config_values_t * +notmuch_config_get_values (notmuch_database_t *notmuch, const char *key) +{ + notmuch_config_values_t *values; + + const char *str; + str = _notmuch_string_map_get (notmuch->config, key); + if (! str) + return NULL; + + values = talloc (notmuch, notmuch_config_values_t); + if (unlikely(! values)) + return NULL; + + values->iterator = str; + values->tok_len = 0; + return values; +} + +notmuch_bool_t +notmuch_config_values_valid (notmuch_config_values_t *values) { + if (! values) + return false; + + return (values->iterator != NULL); +} + +const char * +notmuch_config_values_get (notmuch_config_values_t *values) { + return talloc_strndup (values, values->iterator, values->tok_len); +} + +void +notmuch_config_values_move_to_next (notmuch_config_values_t *values) { + values->iterator += values->tok_len; + values->iterator = strsplit_len (values->iterator, ';', &(values->tok_len)); +} + +void +notmuch_config_values_destroy (notmuch_config_values_t *values) { + talloc_free (values); +} + + notmuch_status_t notmuch_config_set (notmuch_database_t *notmuch, const char *key, diff --git a/lib/notmuch.h b/lib/notmuch.h index e147d5e6..7ae69265 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -236,6 +236,7 @@ typedef struct _notmuch_tags notmuch_tags_t; typedef struct _notmuch_directory notmuch_directory_t; typedef struct _notmuch_filenames notmuch_filenames_t; typedef struct _notmuch_config_list notmuch_config_list_t; +typedef struct _notmuch_config_values notmuch_config_values_t; typedef struct _notmuch_indexopts notmuch_indexopts_t; #endif /* __DOXYGEN__ */ @@ -2405,6 +2406,22 @@ notmuch_config_set (notmuch_database_t *notmuch, const char *key, const char *val, notmuch_bool_t write_through); + +notmuch_config_values_t * +notmuch_config_get_values (notmuch_database_t *notmuch, const char *key); + +notmuch_bool_t +notmuch_config_values_valid (notmuch_config_values_t *values); + +const char * +notmuch_config_values_get (notmuch_config_values_t *values); + +void +notmuch_config_values_move_to_next (notmuch_config_values_t *values); + +void +notmuch_config_values_destroy (notmuch_config_values_t *values); + /** * get the current default indexing options for a given database. * -- 2.28.0 _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-leave@notmuchmail.org