[dovecot-cvs] dovecot/src/lib-storage/index index-messageset.c,1.12,1.13

cras at procontrol.fi cras at procontrol.fi
Tue Jan 21 22:06:51 EET 2003


Update of /home/cvs/dovecot/src/lib-storage/index
In directory danu:/tmp/cvs-serv3985/lib-storage/index

Modified Files:
	index-messageset.c 
Log Message:
Some fixes for handling messageset ranges.



Index: index-messageset.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-messageset.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- index-messageset.c	20 Jan 2003 14:52:51 -0000	1.12
+++ index-messageset.c	21 Jan 2003 20:06:49 -0000	1.13
@@ -56,8 +56,13 @@
 	struct messageset_context *ctx;
 
 	ctx = index_messageset_init(ibox, NULL, uidset);
-	ctx->num1 = num1;
-	ctx->num2 = num2;
+	if (num1 <= num2) {
+		ctx->num1 = num1;
+		ctx->num2 = num2;
+	} else {
+		ctx->num1 = num2;
+		ctx->num2 = num1;
+	}
 	return ctx;
 }
 
@@ -168,9 +173,17 @@
 		ctx->num1 = rec == NULL ? 0 : rec->uid;
 	}
 
-	if (ctx->num2 == (unsigned int)-1)
+	if (ctx->num2 == (unsigned int)-1) {
 		ctx->num2 = ctx->index->header->next_uid-1;
 
+		/* num1 might actually be larger, check */
+		if (ctx->num1 > ctx->num2) {
+			unsigned int temp = ctx->num1;
+			ctx->num1 = ctx->num2;
+			ctx->num2 = temp;
+		}
+	}
+
 	/* get list of expunged messages in our range. */
 	ctx->expunges = mail_modifylog_uid_get_expunges(ctx->index->modifylog,
 							ctx->num1, ctx->num2,
@@ -247,6 +260,12 @@
 		mail->rec = ctx->index->next(ctx->index, mail->rec);
 		mail->client_seq++;
 		mail->idx_seq++;
+
+		if (mail->rec == NULL) {
+			/* finished early (high UID larger than exists) */
+			ctx->ret = 1;
+			return NULL;
+		}
 	} else {
 		do {
 			if (ctx->p != NULL && *ctx->p == '\0') {




More information about the dovecot-cvs mailing list