[dovecot-cvs] dovecot/src/lib-storage mail-search.c,1.17,1.18

cras at dovecot.org cras at dovecot.org
Sun Apr 17 18:43:06 EEST 2005


Update of /var/lib/cvs/dovecot/src/lib-storage
In directory talvi:/tmp/cvs-serv21732

Modified Files:
	mail-search.c 
Log Message:
Some possible fix for HEADER searches and cleanup



Index: mail-search.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/mail-search.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- mail-search.c	8 Oct 2004 17:51:49 -0000	1.17
+++ mail-search.c	17 Apr 2005 15:43:02 -0000	1.18
@@ -106,7 +106,7 @@
 
 static void
 search_arg_analyze(struct mail_search_arg *arg, buffer_t *headers,
-		   int *have_headers, int *have_body, int *have_text)
+		   int *have_body, int *have_text)
 {
 	static const char *date_hdr = "Date";
 	struct mail_search_arg *subarg;
@@ -121,8 +121,7 @@
 		while (subarg != NULL) {
 			if (subarg->result == -1) {
 				search_arg_analyze(subarg, headers,
-						   have_headers, have_body,
-						   have_text);
+						   have_body, have_text);
 			}
 
 			subarg = subarg->next;
@@ -131,21 +130,18 @@
 	case SEARCH_SENTBEFORE:
 	case SEARCH_SENTON:
 	case SEARCH_SENTSINCE:
-		*have_headers = TRUE;
 		buffer_append(headers, &date_hdr, sizeof(const char *));
 		break;
 	case SEARCH_HEADER:
 	case SEARCH_HEADER_ADDRESS:
 		buffer_append(headers, &arg->hdr_field_name,
 			      sizeof(const char *));
-		*have_headers = TRUE;
 		break;
 	case SEARCH_BODY:
 		*have_body = TRUE;
 		break;
 	case SEARCH_TEXT:
 		*have_text = TRUE;
-		*have_headers = TRUE;
 		*have_body = TRUE;
 		break;
 	default:
@@ -164,12 +160,12 @@
 	*have_headers = *have_body = have_text = FALSE;
 
 	headers = buffer_create_dynamic(pool_datastack_create(), 128);
-	for (; args != NULL; args = args->next) {
-		search_arg_analyze(args, headers, have_headers,
-				   have_body, &have_text);
-	}
+	for (; args != NULL; args = args->next)
+		search_arg_analyze(args, headers, have_body, &have_text);
 
-	if (!have_headers || have_text)
+	*have_headers = have_text || headers->used != 0;
+
+	if (headers->used == 0 || have_text)
 		return NULL;
 
 	buffer_append(headers, &null, sizeof(const char *));



More information about the dovecot-cvs mailing list