Hi Mark, On Thu, Oct 30 2014, Mark Walters wrote: > Hi > > On Mon, 27 Oct 2014, Michal Sojka <sojkam1 at fel.cvut.cz> wrote: >> Many functions that implement the search command need to access command >> line options. Instead of passing each option in a separate variable, put >> them in a structure and pass only this structure. >> >> This will become handy in the following patches. >> --- >> notmuch-search.c | 125 >> ++++++++++++++++++++++++++++--------------------------- >> 1 file changed, 64 insertions(+), 61 deletions(-) >> >> diff --git a/notmuch-search.c b/notmuch-search.c >> index bc9be45..0c3e972 100644 >> --- a/notmuch-search.c >> +++ b/notmuch-search.c >> @@ -30,6 +30,16 @@ typedef enum { >> OUTPUT_TAGS >> } output_t; >> >> +typedef struct { >> + sprinter_t *format; >> + notmuch_query_t *query; >> + notmuch_sort_t sort; >> + output_t output; >> + int offset; >> + int limit; >> + int dupe; >> +} search_options_t; >> + >> /* Return two stable query strings that identify exactly the matched >> * and unmatched messages currently in thread. If there are no >> * matched or unmatched messages, the returned buffers will be >> @@ -70,43 +80,39 @@ get_thread_query (notmuch_thread_t *thread, >> } >> >> static int >> -do_search_threads (sprinter_t *format, >> - notmuch_query_t *query, >> - notmuch_sort_t sort, >> - output_t output, >> - int offset, >> - int limit) >> +do_search_threads (search_options_t *opt) >> { >> notmuch_thread_t *thread; >> notmuch_threads_t *threads; >> notmuch_tags_t *tags; >> + sprinter_t *format = opt->format; >> time_t date; >> int i; >> >> - if (offset < 0) { >> - offset += notmuch_query_count_threads (query); >> - if (offset < 0) >> - offset = 0; >> + if (opt->offset < 0) { >> + opt->offset += notmuch_query_count_threads (opt->query); >> + if (opt->offset < 0) >> + opt->offset = 0; >> } >> >> - threads = notmuch_query_search_threads (query); >> + threads = notmuch_query_search_threads (opt->query); >> if (threads == NULL) >> return 1; >> >> format->begin_list (format); >> >> for (i = 0; >> - notmuch_threads_valid (threads) && (limit < 0 || i < offset + limit); >> + notmuch_threads_valid (threads) && (opt->limit < 0 || i < opt->offset >> + opt->limit); >> notmuch_threads_move_to_next (threads), i++) >> { >> thread = notmuch_threads_get (threads); >> >> - if (i < offset) { >> + if (i < opt->offset) { >> notmuch_thread_destroy (thread); >> continue; >> } >> >> - if (output == OUTPUT_THREADS) { >> + if (opt->output == OUTPUT_THREADS) { >> format->set_prefix (format, "thread"); >> format->string (format, >> notmuch_thread_get_thread_id (thread)); >> @@ -123,7 +129,7 @@ do_search_threads (sprinter_t *format, >> >> format->begin_map (format); >> >> - if (sort == NOTMUCH_SORT_OLDEST_FIRST) >> + if (opt->sort == NOTMUCH_SORT_OLDEST_FIRST) >> date = notmuch_thread_get_oldest_date (thread); >> else >> date = notmuch_thread_get_newest_date (thread); >> @@ -215,40 +221,36 @@ do_search_threads (sprinter_t *format, >> } >> >> static int >> -do_search_messages (sprinter_t *format, >> - notmuch_query_t *query, >> - output_t output, >> - int offset, >> - int limit, >> - int dupe) >> +do_search_messages (search_options_t *opt) >> { >> notmuch_message_t *message; >> notmuch_messages_t *messages; >> notmuch_filenames_t *filenames; >> + sprinter_t *format = opt->format; >> int i; >> >> - if (offset < 0) { >> - offset += notmuch_query_count_messages (query); >> - if (offset < 0) >> - offset = 0; >> + if (opt->offset < 0) { >> + opt->offset += notmuch_query_count_messages (opt->query); >> + if (opt->offset < 0) >> + opt->offset = 0; >> } >> >> - messages = notmuch_query_search_messages (query); >> + messages = notmuch_query_search_messages (opt->query); >> if (messages == NULL) >> return 1; >> >> format->begin_list (format); >> >> for (i = 0; >> - notmuch_messages_valid (messages) && (limit < 0 || i < offset + limit); >> + notmuch_messages_valid (messages) && (opt->limit < 0 || i < >> opt->offset + opt->limit); >> notmuch_messages_move_to_next (messages), i++) >> { >> - if (i < offset) >> + if (i < opt->offset) >> continue; >> >> message = notmuch_messages_get (messages); >> >> - if (output == OUTPUT_FILES) { >> + if (opt->output == OUTPUT_FILES) { >> int j; >> filenames = notmuch_message_get_filenames (message); >> >> @@ -256,7 +258,7 @@ do_search_messages (sprinter_t *format, >> notmuch_filenames_valid (filenames); >> notmuch_filenames_move_to_next (filenames), j++) >> { >> - if (dupe < 0 || dupe == j) { >> + if (opt->dupe < 0 || opt->dupe == j) { >> format->string (format, notmuch_filenames_get (filenames)); >> format->separator (format); >> } >> @@ -283,12 +285,13 @@ do_search_messages (sprinter_t *format, >> >> static int >> do_search_tags (notmuch_database_t *notmuch, >> - sprinter_t *format, >> - notmuch_query_t *query) >> + const search_options_t *opt) >> { > > What about leaving out the *notmuch argument and getting that from the > query (query->notmuch I think)?
I was also thinking about this, but notmuch_query_t is an opaque structure which means that we would need a getter function in the library. I think it is simpler to have it this way. -Michal