From: Timo Sirainen Date: Thu, 29 May 2008 04:05:18 +0000 (+0300) Subject: Fixes to sort indexing. X-Git-Tag: 1.1.rc6~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a9ce43c494ce7434277f6b30e591f4b832e2d49d;p=thirdparty%2Fdovecot%2Fcore.git Fixes to sort indexing. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/index-sort-string.c b/src/lib-storage/index/index-sort-string.c index c8806cae78..d7a167abf0 100644 --- a/src/lib-storage/index/index-sort-string.c +++ b/src/lib-storage/index/index-sort-string.c @@ -366,8 +366,14 @@ index_sort_bsearch(struct sort_string_context *ctx, const char *key, *idx_r = idx; if (idx > start_idx) { - *prev_str_r = index_sort_get_string(ctx, idx - 1, - nodes[idx-1].seq); + prev = idx; + do { + prev--; + str2 = index_sort_get_string(ctx, prev, + nodes[prev].seq); + } while (str2 == &expunged_msg && prev > 0 && + nodes[prev-1].sort_id == nodes[prev].sort_id); + *prev_str_r = str2; } } @@ -408,7 +414,7 @@ static void index_sort_merge(struct sort_string_context *ctx) if (ret <= 0) { array_append(&ctx->sorted_nodes, &znodes[zpos], 1); - prev_str = nzstr; + prev_str = zstr; zpos++; } else { array_append(&ctx->sorted_nodes, &nznodes[nzpos], 1);