dovecot-2.0: doveadm fetch/search/etc: Handle "NOT" correctly in...

dovecot at dovecot.org dovecot at dovecot.org
Fri Apr 30 16:15:31 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/b9efc1ca4c37
changeset: 11239:b9efc1ca4c37
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Apr 30 16:15:27 2010 +0300
description:
doveadm fetch/search/etc: Handle "NOT" correctly in search query.

diffstat:

 src/doveadm/doveadm-mail-fetch.c     |   6 ++++--
 src/doveadm/doveadm-mail-list-iter.c |  12 +++++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diffs (59 lines):

diff -r dedf835014a2 -r b9efc1ca4c37 src/doveadm/doveadm-mail-fetch.c
--- a/src/doveadm/doveadm-mail-fetch.c	Fri Apr 30 16:14:42 2010 +0300
+++ b/src/doveadm/doveadm-mail-fetch.c	Fri Apr 30 16:15:27 2010 +0300
@@ -338,12 +338,14 @@
 		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 -r dedf835014a2 -r b9efc1ca4c37 src/doveadm/doveadm-mail-list-iter.c
--- a/src/doveadm/doveadm-mail-list-iter.c	Fri Apr 30 16:14:42 2010 +0300
+++ b/src/doveadm/doveadm-mail-list-iter.c	Fri Apr 30 16:15:27 2010 +0300
@@ -15,7 +15,7 @@
 	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 @@
 		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 *


More information about the dovecot-cvs mailing list