From 1d02dd64afe245a2b5a8461feeba975e61f0c233 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Thu, 11 Nov 2010 00:07:24 -0800 Subject: lib: Add new, public notmuch_message_get_filenames This augments the existing notmuch_message_get_filename by allowing the caller access to all filenames in the case of multiple files for a single message. To support this, we split the iterator (notmuch_filenames_t) away from the list storage (notmuch_filename_list_t) where previously these were a single object (notmuch_filenames_t). Then, whenever the user asks for a file or filename, the message object lazily creates a complete notmuch_filename_list_t and then: For notmuch_message_get_filename, returns the first filename in the list. For notmuch_message_get_filenames, creates and returns a new iterator for the filename list. --- lib/notmuch-private.h | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'lib/notmuch-private.h') diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 6a9d5ddd..37ccbb31 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -450,15 +450,35 @@ _notmuch_tags_prepare_iterator (notmuch_tags_t *tags); /* filenames.c */ -notmuch_filenames_t * -_notmuch_filenames_create (const void *ctx); +typedef struct _notmuch_filename_node { + char *filename; + struct _notmuch_filename_node *next; +} notmuch_filename_node_t; + +typedef struct _notmuch_filename_list { + notmuch_filename_node_t *head; + notmuch_filename_node_t **tail; +} notmuch_filename_list_t; +notmuch_filename_list_t * +_notmuch_filename_list_create (const void *ctx); + +/* Add 'filename' to 'list'. + * + * The list will create its own talloced copy of 'filename'. + */ void -_notmuch_filenames_add_filename (notmuch_filenames_t *filenames, - const char *filename); +_notmuch_filename_list_add_filename (notmuch_filename_list_t *list, + const char *filename); void -_notmuch_filenames_move_to_first (notmuch_filenames_t *filenames); +_notmuch_filename_list_destroy (notmuch_filename_list_t *list); + +/* The notmuch_filenames_t is an iterator object for a + * notmuch_filename_list_t */ +notmuch_filenames_t * +_notmuch_filenames_create (const void *ctx, + notmuch_filename_list_t *list); #pragma GCC visibility pop -- cgit v1.2.3