From: Timo Sirainen Date: Fri, 30 Apr 2010 13:15:27 +0000 (+0300) Subject: doveadm fetch/search/etc: Handle "NOT" correctly in search query. X-Git-Tag: 2.0.beta5~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d28f3e9322095648773e6158503e1d6505f00880;p=thirdparty%2Fdovecot%2Fcore.git doveadm fetch/search/etc: Handle "NOT" correctly in search query. --HG-- branch : HEAD --- diff --git a/src/doveadm/doveadm-mail-fetch.c b/src/doveadm/doveadm-mail-fetch.c index 6bb168ba58..ae179efeae 100644 --- a/src/doveadm/doveadm-mail-fetch.c +++ b/src/doveadm/doveadm-mail-fetch.c @@ -338,12 +338,14 @@ static bool search_args_have_unique_fetch(struct mail_search_args *args) switch (arg->type) { case SEARCH_MAILBOX: case SEARCH_MAILBOX_GUID: - have_mailbox = TRUE; + if (!arg->not) + have_mailbox = TRUE; break; case SEARCH_SEQSET: case SEARCH_UIDSET: seqset = array_get(&arg->value.seqset, &count); - if (count == 1 && seqset->seq1 == seqset->seq2) + if (count == 1 && seqset->seq1 == seqset->seq2 && + !arg->not) have_msg = TRUE; break; default: diff --git a/src/doveadm/doveadm-mail-list-iter.c b/src/doveadm/doveadm-mail-list-iter.c index 6f3e7057e7..3ade240b5d 100644 --- a/src/doveadm/doveadm-mail-list-iter.c +++ b/src/doveadm/doveadm-mail-list-iter.c @@ -15,7 +15,7 @@ struct doveadm_mail_list_iter { struct mailbox_list_iterate_context *iter; }; -static void +static int search_args_get_mailbox_patterns(const struct mail_search_arg *args, ARRAY_TYPE(const_string) *patterns) { @@ -28,18 +28,24 @@ search_args_get_mailbox_patterns(const struct mail_search_arg *args, case SEARCH_INTHREAD: subargs = args->value.subargs; for (; subargs != NULL; subargs = subargs->next) { - search_args_get_mailbox_patterns(subargs, - patterns); + if (!search_args_get_mailbox_patterns(subargs, + patterns)) + return 0; } break; case SEARCH_MAILBOX: case SEARCH_MAILBOX_GLOB: + if (args->not) { + array_clear(patterns); + return 0; + } array_append(patterns, &args->value.str, 1); break; default: break; } } + return 1; } struct doveadm_mail_list_iter *