[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