annotate src/lib-index/mail-index-view.c @ 22576:707ae9de3812

lib: istream-multiplex - Minor code cleanup Avoid propagating the error twice, and avoid any confusion about what "got" actually contains.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 05 Oct 2017 20:24:11 +0300
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21389
diff changeset
1 /* Copyright (c) 2003-2017 Dovecot authors, see the included COPYING file */
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
3470
346a494c2feb Moved array declaration to array-decl.h and include it in lib.h. So array.h
Timo Sirainen <tss@iki.fi>
parents: 3363
diff changeset
4 #include "array.h"
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "buffer.h"
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 15775
diff changeset
6 #include "llist.h"
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "mail-index-view-private.h"
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include "mail-transaction-log.h"
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
14896
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
10 struct mail_index_view *
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
11 mail_index_view_dup_private(const struct mail_index_view *src)
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
12 {
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
13 struct mail_index_view *view;
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
14 struct mail_index_map *map;
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
15
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
16 view = i_new(struct mail_index_view, 1);
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
17 mail_index_view_clone(view, src);
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
18
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
19 map = mail_index_map_clone(view->map);
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
20 mail_index_unmap(&view->map);
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
21 view->map = map;
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
22 return view;
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
23 }
d76732546de3 lib-index: Added mail_index_view_dup_private()
Timo Sirainen <tss@iki.fi>
parents: 14629
diff changeset
24
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
25 void mail_index_view_clone(struct mail_index_view *dest,
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
26 const struct mail_index_view *src)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 {
21389
59437f8764c6 global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
28 i_zero(dest);
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
29 dest->refcount = 1;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
30 dest->v = src->v;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
31 dest->index = src->index;
4616
b0966236fda7 Memory leak fixes
Timo Sirainen <tss@iki.fi>
parents: 4596
diff changeset
32 if (src->log_view != NULL) {
b0966236fda7 Memory leak fixes
Timo Sirainen <tss@iki.fi>
parents: 4596
diff changeset
33 dest->log_view =
b0966236fda7 Memory leak fixes
Timo Sirainen <tss@iki.fi>
parents: 4596
diff changeset
34 mail_transaction_log_view_open(src->index->log);
b0966236fda7 Memory leak fixes
Timo Sirainen <tss@iki.fi>
parents: 4596
diff changeset
35 }
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
37 dest->indexid = src->indexid;
6388
78b9315ed5ff mail_index_view_clone() needs to copy inconsistency_id.
Timo Sirainen <tss@iki.fi>
parents: 6377
diff changeset
38 dest->inconsistency_id = src->inconsistency_id;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
39 dest->map = src->map;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
40 if (dest->map != NULL)
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
41 dest->map->refcount++;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
5747
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
43 dest->log_file_expunge_seq = src->log_file_expunge_seq;
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
44 dest->log_file_expunge_offset = src->log_file_expunge_offset;
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
45 dest->log_file_head_seq = src->log_file_head_seq;
c71f611bbffc Removed syncs_done array. Instead track appends and expunges separately.
Timo Sirainen <tss@iki.fi>
parents: 5689
diff changeset
46 dest->log_file_head_offset = src->log_file_head_offset;
5569
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
47
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
48 i_array_init(&dest->module_contexts,
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
49 I_MIN(5, mail_index_module_register.id));
12762
74300385cce0 lib-index: Give better assert-crashes if view or log view isn't closed.
Timo Sirainen <tss@iki.fi>
parents: 11538
diff changeset
50
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 15775
diff changeset
51 DLLIST_PREPEND(&dest->index->views, dest);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
54 void mail_index_view_ref(struct mail_index_view *view)
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
55 {
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
56 view->refcount++;
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
57 }
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
58
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
59 static void view_close(struct mail_index_view *view)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 {
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
61 i_assert(view->refcount == 0);
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 15775
diff changeset
62 i_assert(view->index->views != NULL);
12762
74300385cce0 lib-index: Give better assert-crashes if view or log view isn't closed.
Timo Sirainen <tss@iki.fi>
parents: 11538
diff changeset
63
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 15775
diff changeset
64 DLLIST_REMOVE(&view->index->views, view);
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
65
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
66 mail_transaction_log_view_close(&view->log_view);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
4358
414cd456e7de We used "already synced log positions in view" array to store locations of
Timo Sirainen <tss@iki.fi>
parents: 4244
diff changeset
68 if (array_is_created(&view->syncs_hidden))
414cd456e7de We used "already synced log positions in view" array to store locations of
Timo Sirainen <tss@iki.fi>
parents: 4244
diff changeset
69 array_free(&view->syncs_hidden);
5853
d9f319a9d6e0 mail_index_map now contains pointer to index, so all functions taking map
Timo Sirainen <tss@iki.fi>
parents: 5772
diff changeset
70 mail_index_unmap(&view->map);
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
71 if (array_is_created(&view->map_refs)) {
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
72 mail_index_view_unref_maps(view);
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
73 array_free(&view->map_refs);
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
74 }
5569
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
75 array_free(&view->module_contexts);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 i_free(view);
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 3828
diff changeset
79 bool mail_index_view_is_inconsistent(struct mail_index_view *view)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 {
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
81 if (view->index->indexid != view->indexid ||
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
82 view->index->inconsistency_id != view->inconsistency_id)
1942
2b114aa7eeec handle losing index file
Timo Sirainen <tss@iki.fi>
parents: 1940
diff changeset
83 view->inconsistent = TRUE;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 return view->inconsistent;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 struct mail_index *mail_index_view_get_index(struct mail_index_view *view)
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 return view->index;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91
11538
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
92 unsigned int
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
93 mail_index_view_get_transaction_count(struct mail_index_view *view)
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
94 {
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
95 i_assert(view->transactions >= 0);
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
96
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
97 return view->transactions;
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
98 }
aa66db4073c5 lib-index: Added mail_index_view_get_transaction_count().
Timo Sirainen <tss@iki.fi>
parents: 11039
diff changeset
99
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 void mail_index_view_transaction_ref(struct mail_index_view *view)
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 view->transactions++;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 void mail_index_view_transaction_unref(struct mail_index_view *view)
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 i_assert(view->transactions > 0);
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 view->transactions--;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
112 static void mail_index_view_ref_map(struct mail_index_view *view,
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
113 struct mail_index_map *map)
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
114 {
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
115 struct mail_index_map *const *maps;
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
116 unsigned int i, count;
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
117
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
118 if (array_is_created(&view->map_refs)) {
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
119 maps = array_get(&view->map_refs, &count);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
120
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
121 /* if map is already referenced, do nothing */
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
122 for (i = 0; i < count; i++) {
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
123 if (maps[i] == map)
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
124 return;
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
125 }
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
126 } else {
4596
bf4e98a0de3f Replaced ARRAY_CREATE() macro with [ipt]_array_init() macros. The macro
Timo Sirainen <tss@iki.fi>
parents: 4594
diff changeset
127 i_array_init(&view->map_refs, 4);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
128 }
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
129
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
130 /* reference the given mapping. the reference is dropped when the view
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
131 is synchronized or closed. */
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
132 map->refcount++;
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
133 array_append(&view->map_refs, &map, 1);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
134 }
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
135
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
136 void mail_index_view_unref_maps(struct mail_index_view *view)
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
137 {
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
138 struct mail_index_map **maps;
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
139 unsigned int i, count;
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
140
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
141 if (!array_is_created(&view->map_refs))
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
142 return;
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
143
4451
1a35d53c18fc Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents: 4358
diff changeset
144 maps = array_get_modifiable(&view->map_refs, &count);
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
145 for (i = 0; i < count; i++)
5853
d9f319a9d6e0 mail_index_map now contains pointer to index, so all functions taking map
Timo Sirainen <tss@iki.fi>
parents: 5772
diff changeset
146 mail_index_unmap(&maps[i]);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
147
3823
48a2d15ae0c4 Converted some buffers to arrays.
Timo Sirainen <tss@iki.fi>
parents: 3470
diff changeset
148 array_clear(&view->map_refs);
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
149 }
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
150
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
151 static uint32_t view_get_messages_count(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
152 {
5855
fd6ff4d9cab1 Removed view->hdr. Use view->map->hdr directly.
Timo Sirainen <tss@iki.fi>
parents: 5854
diff changeset
153 return view->map->hdr.messages_count;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
154 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
155
2892
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
156 static const struct mail_index_header *
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
157 view_get_header(struct mail_index_view *view)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 {
5855
fd6ff4d9cab1 Removed view->hdr. Use view->map->hdr directly.
Timo Sirainen <tss@iki.fi>
parents: 5854
diff changeset
159 return &view->map->hdr;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
161
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
162 static const struct mail_index_record *
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
163 view_lookup_full(struct mail_index_view *view, uint32_t seq,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
164 struct mail_index_map **map_r, bool *expunged_r)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165 {
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
166 static struct mail_index_record broken_rec;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 struct mail_index_map *map;
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
168 const struct mail_index_record *rec, *head_rec;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169
2904
642ba9cd3dac Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
Timo Sirainen <tss@iki.fi>
parents: 2892
diff changeset
170 i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
172 /* look up the record */
17428
4b1117b5cd8e mail-index: trivial robomatic migration from _MAP_IDX to new helper
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
173 rec = MAIL_INDEX_REC_AT_SEQ(view->map, seq);
8873
a514df3e20db index: Minor optimization.
Timo Sirainen <tss@iki.fi>
parents: 8724
diff changeset
174 if (unlikely(rec->uid == 0)) {
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
175 if (!view->inconsistent) {
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
176 mail_index_set_error(view->index,
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
177 "Corrupted Index file %s: Record [%u].uid=0",
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
178 view->index->filepath, seq);
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
179 (void)mail_index_fsck(view->index);
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
180 view->inconsistent = TRUE;
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
181 }
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
182
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
183 /* we'll need to return something so the caller doesn't crash */
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
184 *map_r = view->map;
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
185 if (expunged_r != NULL)
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
186 *expunged_r = TRUE;
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
187 return &broken_rec;
4895
95594bcf13ab If looked up record contains UID=0, mark the index corrupted.
Timo Sirainen <tss@iki.fi>
parents: 4616
diff changeset
188 }
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189 if (view->map == view->index->map) {
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
190 /* view's mapping is latest. we can use it directly. */
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
191 *map_r = view->map;
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
192 if (expunged_r != NULL)
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
193 *expunged_r = FALSE;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
194 return rec;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
196
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
197 /* look up the record from head mapping. it may contain some changes.
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
199 start looking up from the same sequence as in the old view.
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
200 if there are no expunges, it's there. otherwise it's somewhere
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
201 before (since records can't be inserted).
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
202
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
203 usually there are only a few expunges, so just going downwards from
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
204 our initial sequence position is probably faster than binary
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
205 search. */
5772
002aa9bbfcb2 Removed index->hdr. Use index->map->hdr instead.
Timo Sirainen <tss@iki.fi>
parents: 5769
diff changeset
206 if (seq > view->index->map->hdr.messages_count)
002aa9bbfcb2 Removed index->hdr. Use index->map->hdr instead.
Timo Sirainen <tss@iki.fi>
parents: 5769
diff changeset
207 seq = view->index->map->hdr.messages_count;
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
208 if (seq == 0) {
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
209 /* everything is expunged from head. use the old record. */
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
210 *map_r = view->map;
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
211 if (expunged_r != NULL)
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
212 *expunged_r = TRUE;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
213 return rec;
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
214 }
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
215
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
216 map = view->index->map;
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
217 do {
17431
b579e315d9a8 mail-index: use _REC_AT_SEQ not _MAP_IDX in backward loops
Phil Carmody <phil@dovecot.fi>
parents: 17428
diff changeset
218 head_rec = MAIL_INDEX_REC_AT_SEQ(map, seq);
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
219 if (head_rec->uid <= rec->uid)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
220 break;
17431
b579e315d9a8 mail-index: use _REC_AT_SEQ not _MAP_IDX in backward loops
Phil Carmody <phil@dovecot.fi>
parents: 17428
diff changeset
221 } while (--seq > 0);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
222
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
223 if (head_rec->uid == rec->uid) {
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
224 /* found it. use it. reference the index mapping so that the
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
225 returned record doesn't get invalidated after next sync. */
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
226 mail_index_view_ref_map(view, view->index->map);
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
227 *map_r = view->index->map;
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
228 if (expunged_r != NULL)
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
229 *expunged_r = FALSE;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
230 return head_rec;
2191
4d25f3fe5de1 mail_index_lookup() and mail_index_lookup_extra() now returns 0 if message
Timo Sirainen <tss@iki.fi>
parents: 2116
diff changeset
231 } else {
3824
3e756ea0474b Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents: 3823
diff changeset
232 /* expuned from head. use the old record. */
2552
13c79a556b1f Refcounting fixes for index mappings.
Timo Sirainen <tss@iki.fi>
parents: 2240
diff changeset
233 *map_r = view->map;
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
234 if (expunged_r != NULL)
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
235 *expunged_r = TRUE;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
236 return rec;
2191
4d25f3fe5de1 mail_index_lookup() and mail_index_lookup_extra() now returns 0 if message
Timo Sirainen <tss@iki.fi>
parents: 2116
diff changeset
237 }
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
238 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
239
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
240 static void view_lookup_uid(struct mail_index_view *view, uint32_t seq,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
241 uint32_t *uid_r)
2116
fbb4da13ee3b Fixes for extra_records
Timo Sirainen <tss@iki.fi>
parents: 2114
diff changeset
242 {
2904
642ba9cd3dac Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
Timo Sirainen <tss@iki.fi>
parents: 2892
diff changeset
243 i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
244
17428
4b1117b5cd8e mail-index: trivial robomatic migration from _MAP_IDX to new helper
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
245 *uid_r = MAIL_INDEX_REC_AT_SEQ(view->map, seq)->uid;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
246 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
247
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
248 static void view_lookup_seq_range(struct mail_index_view *view,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
249 uint32_t first_uid, uint32_t last_uid,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
250 uint32_t *first_seq_r, uint32_t *last_seq_r)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
251 {
9333
190669ac816c Created mail_index_map_lookup_seq_range() from code in mail-index-view.c.
Timo Sirainen <tss@iki.fi>
parents: 8875
diff changeset
252 mail_index_map_lookup_seq_range(view->map, first_uid, last_uid,
190669ac816c Created mail_index_map_lookup_seq_range() from code in mail-index-view.c.
Timo Sirainen <tss@iki.fi>
parents: 8875
diff changeset
253 first_seq_r, last_seq_r);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
254 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
255
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
256 static void view_lookup_first(struct mail_index_view *view,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
257 enum mail_flags flags, uint8_t flags_mask,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
258 uint32_t *seq_r)
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
259 {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
260 #define LOW_UPDATE(x) \
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
261 STMT_START { if ((x) > low_uid) low_uid = x; } STMT_END
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
262 const struct mail_index_header *hdr = &view->map->hdr;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
263 const struct mail_index_record *rec;
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
264 uint32_t seq, seq2, low_uid = 1;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
265
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
266 *seq_r = 0;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
267
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
268 if ((flags_mask & MAIL_SEEN) != 0 && (flags & MAIL_SEEN) == 0)
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
269 LOW_UPDATE(hdr->first_unseen_uid_lowwater);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
270 if ((flags_mask & MAIL_DELETED) != 0 && (flags & MAIL_DELETED) != 0)
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
271 LOW_UPDATE(hdr->first_deleted_uid_lowwater);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
272
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
273 if (low_uid == 1)
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
274 seq = 1;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
275 else {
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
276 if (!mail_index_lookup_seq_range(view, low_uid, hdr->next_uid,
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
277 &seq, &seq2))
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
278 return;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
279 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
280
8724
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
281 i_assert(hdr->messages_count <= view->map->rec_map->records_count);
3453dbc2e42e mail_index_lookup_first() didn't always find the result.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
282 for (; seq <= hdr->messages_count; seq++) {
17428
4b1117b5cd8e mail-index: trivial robomatic migration from _MAP_IDX to new helper
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
283 rec = MAIL_INDEX_REC_AT_SEQ(view->map, seq);
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
284 if ((rec->flags & flags_mask) == (uint8_t)flags) {
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
285 *seq_r = seq;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
286 break;
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
287 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
288 }
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
289 }
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
290
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
291 static void
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
292 mail_index_data_lookup_keywords(struct mail_index_map *map,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
293 const unsigned char *data,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
294 ARRAY_TYPE(keyword_indexes) *keyword_idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
295 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
296 const unsigned int *keyword_idx_map;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
297 unsigned int i, j, keyword_count, index_idx;
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
298 uint32_t idx, hdr_size;
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
299 uint16_t record_size, record_align;
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
300
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
301 array_clear(keyword_idx);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
302 if (data == NULL) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
303 /* no keywords at all in index */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
304 return;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
305 }
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
306 (void)mail_index_ext_get_size(map, map->index->keywords_ext_id,
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
307 &hdr_size, &record_size,
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
308 &record_align);
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
309
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
310 /* keyword_idx_map[] contains file => index keyword mapping */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
311 if (!array_is_created(&map->keyword_idx_map))
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
312 return;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
313
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
314 keyword_idx_map = array_get(&map->keyword_idx_map, &keyword_count);
11039
0f98525e4567 Removed dead code.
Timo Sirainen <tss@iki.fi>
parents: 10582
diff changeset
315 for (i = 0; i < record_size; i++) {
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
316 /* first do the quick check to see if there's keywords at all */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
317 if (data[i] == 0)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
318 continue;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
319
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
320 idx = i * CHAR_BIT;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
321 for (j = 0; j < CHAR_BIT; j++, idx++) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
322 if ((data[i] & (1 << j)) == 0)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
323 continue;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
324
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
325 if (idx >= keyword_count) {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
326 /* extra bits set in keyword bytes.
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
327 shouldn't happen, but just ignore. */
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
328 break;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
329 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
330
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
331 index_idx = keyword_idx_map[idx];
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
332 array_append(keyword_idx, &index_idx, 1);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
333 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
334 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
335 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
336
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
337 static void view_lookup_keywords(struct mail_index_view *view, uint32_t seq,
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
338 ARRAY_TYPE(keyword_indexes) *keyword_idx)
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
339 {
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
340 struct mail_index_map *map;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
341 const void *data;
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
342
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
343 mail_index_lookup_ext_full(view, seq, view->index->keywords_ext_id,
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
344 &map, &data, NULL);
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
345 mail_index_data_lookup_keywords(map, data, keyword_idx);
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
346 }
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
347
8875
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
348 static const void *
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
349 view_map_lookup_ext_full(struct mail_index_map *map,
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
350 const struct mail_index_record *rec, uint32_t ext_id)
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
351 {
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
352 const struct mail_index_ext *ext;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
353 uint32_t idx;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
354
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
355 if (!mail_index_map_get_ext_idx(map, ext_id, &idx))
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
356 return NULL;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
357
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
358 ext = array_idx(&map->extensions, idx);
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
359 return ext->record_offset == 0 ? NULL :
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
360 CONST_PTR_OFFSET(rec, ext->record_offset);
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
361 }
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
362
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
363 static void
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
364 view_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
365 uint32_t ext_id, struct mail_index_map **map_r,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
366 const void **data_r, bool *expunged_r)
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
367 {
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
368 const struct mail_index_record *rec;
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
369
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
370 rec = view->v.lookup_full(view, seq, map_r, expunged_r);
8875
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
371 *data_r = view_map_lookup_ext_full(*map_r, rec, ext_id);
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
372 }
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
373
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
374 static void view_get_header_ext(struct mail_index_view *view,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
375 struct mail_index_map *map, uint32_t ext_id,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
376 const void **data_r, size_t *data_size_r)
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
377 {
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
378 const struct mail_index_ext *ext;
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
379 uint32_t idx;
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
380
3828
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
381 if (map == NULL) {
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
382 /* no mapping given, use head mapping */
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
383 map = view->index->map;
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
384 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
385
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
386 if (!mail_index_map_get_ext_idx(map, ext_id, &idx)) {
3828
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
387 /* extension doesn't exist in this index file */
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
388 *data_r = NULL;
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
389 *data_size_r = 0;
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
390 return;
3016
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
391 }
61c8d205d887 Initial support for keywords. Syncing to mbox/maildir doesn't work yet.
Timo Sirainen <tss@iki.fi>
parents: 2936
diff changeset
392
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 3016
diff changeset
393 ext = array_idx(&map->extensions, idx);
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
394 *data_r = CONST_PTR_OFFSET(map->hdr_base, ext->hdr_offset);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
395 *data_size_r = ext->hdr_size;
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
396 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
397
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
398 static bool view_ext_get_reset_id(struct mail_index_view *view ATTR_UNUSED,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
399 struct mail_index_map *map,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
400 uint32_t ext_id, uint32_t *reset_id_r)
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
401 {
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
402 const struct mail_index_ext *ext;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
403 uint32_t idx;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
404
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
405 if (!mail_index_map_get_ext_idx(map, ext_id, &idx))
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
406 return FALSE;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
407
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
408 ext = array_idx(&map->extensions, idx);
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
409 *reset_id_r = ext->reset_id;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
410 return TRUE;
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
411 }
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
412
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
413 void mail_index_view_close(struct mail_index_view **_view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
414 {
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
415 struct mail_index_view *view = *_view;
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
416
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
417 *_view = NULL;
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
418 if (--view->refcount > 0)
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
419 return;
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
420
4977
a9babc1b3c65 If there are transactions left while unlocking, don't unlock. Also added some
Timo Sirainen <tss@iki.fi>
parents: 4895
diff changeset
421 i_assert(view->transactions == 0);
a9babc1b3c65 If there are transactions left while unlocking, don't unlock. Also added some
Timo Sirainen <tss@iki.fi>
parents: 4895
diff changeset
422
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
423 view->v.close(view);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
424 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
425
2904
642ba9cd3dac Removed view->messages_count, view->hdr.messages_count is enough. Also fixes
Timo Sirainen <tss@iki.fi>
parents: 2892
diff changeset
426 uint32_t mail_index_view_get_messages_count(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
427 {
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
428 return view->v.get_messages_count(view);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
429 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
430
2892
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
431 const struct mail_index_header *
62d53b49110d Changed mail_index_get_header() to return the header as return value because
Timo Sirainen <tss@iki.fi>
parents: 2884
diff changeset
432 mail_index_get_header(struct mail_index_view *view)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
433 {
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
434 return view->v.get_header(view);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
435 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
436
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
437 const struct mail_index_record *
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
438 mail_index_lookup(struct mail_index_view *view, uint32_t seq)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
439 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
440 struct mail_index_map *map;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
441
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
442 return mail_index_lookup_full(view, seq, &map);
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
443 }
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
444
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
445 const struct mail_index_record *
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
446 mail_index_lookup_full(struct mail_index_view *view, uint32_t seq,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
447 struct mail_index_map **map_r)
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
448 {
15775
f9b1aaf844c8 lib-index: Don't lookup mail's expunge-state in transaction log view if caller doesn't care.
Timo Sirainen <tss@iki.fi>
parents: 15715
diff changeset
449 return view->v.lookup_full(view, seq, map_r, NULL);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
450 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
451
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
452 bool mail_index_is_expunged(struct mail_index_view *view, uint32_t seq)
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
453 {
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
454 struct mail_index_map *map;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
455 bool expunged;
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
456
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
457 (void)view->v.lookup_full(view, seq, &map, &expunged);
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
458 return expunged;
2563
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
459 }
5752e5ac88f0 Save extra record/header infos into index file permanently.
Timo Sirainen <tss@iki.fi>
parents: 2552
diff changeset
460
7880
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
461 void mail_index_map_lookup_keywords(struct mail_index_map *map, uint32_t seq,
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
462 ARRAY_TYPE(keyword_indexes) *keyword_idx)
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
463 {
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
464 const struct mail_index_ext *ext;
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
465 const struct mail_index_record *rec;
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
466 const void *data;
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
467 uint32_t idx;
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
468
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
469 if (!mail_index_map_get_ext_idx(map, map->index->keywords_ext_id, &idx))
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
470 data = NULL;
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
471 else {
17428
4b1117b5cd8e mail-index: trivial robomatic migration from _MAP_IDX to new helper
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
472 rec = MAIL_INDEX_REC_AT_SEQ(map, seq);
7880
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
473 ext = array_idx(&map->extensions, idx);
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
474 data = ext->record_offset == 0 ? NULL :
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
475 CONST_PTR_OFFSET(rec, ext->record_offset);
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
476 }
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
477 mail_index_data_lookup_keywords(map, data, keyword_idx);
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
478 }
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
479
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
480 void mail_index_lookup_keywords(struct mail_index_view *view, uint32_t seq,
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
481 ARRAY_TYPE(keyword_indexes) *keyword_idx)
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
482 {
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
483 view->v.lookup_keywords(view, seq, keyword_idx);
7880
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
484 }
cca4ef877d43 Added mail_index_map_lookup_keywords().
Timo Sirainen <tss@iki.fi>
parents: 7362
diff changeset
485
8875
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
486 void mail_index_lookup_view_flags(struct mail_index_view *view, uint32_t seq,
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
487 enum mail_flags *flags_r,
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
488 ARRAY_TYPE(keyword_indexes) *keyword_idx)
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
489 {
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
490 const struct mail_index_record *rec;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
491 const unsigned char *keyword_data;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
492
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
493 i_assert(seq > 0 && seq <= mail_index_view_get_messages_count(view));
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
494
17428
4b1117b5cd8e mail-index: trivial robomatic migration from _MAP_IDX to new helper
Phil Carmody <phil@dovecot.fi>
parents: 17130
diff changeset
495 rec = MAIL_INDEX_REC_AT_SEQ(view->map, seq);
8875
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
496 *flags_r = rec->flags;
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
497
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
498 keyword_data = view_map_lookup_ext_full(view->map, rec,
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
499 view->index->keywords_ext_id);
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
500 mail_index_data_lookup_keywords(view->map, keyword_data, keyword_idx);
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
501 }
629004d13ec4 Added mail_index_lookup_view_flags()
Timo Sirainen <tss@iki.fi>
parents: 8873
diff changeset
502
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
503 void mail_index_lookup_uid(struct mail_index_view *view, uint32_t seq,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
504 uint32_t *uid_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
505 {
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
506 view->v.lookup_uid(view, seq, uid_r);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
507 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
508
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
509 bool mail_index_lookup_seq_range(struct mail_index_view *view,
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
510 uint32_t first_uid, uint32_t last_uid,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
511 uint32_t *first_seq_r, uint32_t *last_seq_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
512 {
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
513 view->v.lookup_seq_range(view, first_uid, last_uid,
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
514 first_seq_r, last_seq_r);
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
515 return *first_seq_r != 0;
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
516 }
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
517
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
518 bool mail_index_lookup_seq(struct mail_index_view *view,
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
519 uint32_t uid, uint32_t *seq_r)
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
520 {
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
521 view->v.lookup_seq_range(view, uid, uid, seq_r, seq_r);
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
522 return *seq_r != 0;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
523 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
524
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
525 void mail_index_lookup_first(struct mail_index_view *view,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
526 enum mail_flags flags, uint8_t flags_mask,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
527 uint32_t *seq_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
528 {
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
529 view->v.lookup_first(view, flags, flags_mask, seq_r);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
530 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
531
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
532 void mail_index_lookup_ext(struct mail_index_view *view, uint32_t seq,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
533 uint32_t ext_id, const void **data_r,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
534 bool *expunged_r)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
535 {
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
536 struct mail_index_map *map;
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
537
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
538 mail_index_lookup_ext_full(view, seq, ext_id, &map, data_r, expunged_r);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
539 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
540
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
541 void mail_index_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
542 uint32_t ext_id, struct mail_index_map **map_r,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
543 const void **data_r, bool *expunged_r)
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
544 {
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
545 view->v.lookup_ext_full(view, seq, ext_id, map_r, data_r, expunged_r);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
546 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
547
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
548 void mail_index_get_header_ext(struct mail_index_view *view, uint32_t ext_id,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
549 const void **data_r, size_t *data_size_r)
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
550 {
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
551 view->v.get_header_ext(view, NULL, ext_id, data_r, data_size_r);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
552 }
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
553
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
554 void mail_index_map_get_header_ext(struct mail_index_view *view,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
555 struct mail_index_map *map, uint32_t ext_id,
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
556 const void **data_r, size_t *data_size_r)
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
557 {
6275
913b188f4dd4 Removed explicit locking from views and maps. They were already locked all
Timo Sirainen <tss@iki.fi>
parents: 6262
diff changeset
558 view->v.get_header_ext(view, map, ext_id, data_r, data_size_r);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
559 }
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
560
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
561 bool mail_index_ext_get_reset_id(struct mail_index_view *view,
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
562 struct mail_index_map *map,
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
563 uint32_t ext_id, uint32_t *reset_id_r)
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
564 {
6262
15abc6d262cd mail_index_ext_get_reset_id() takes now map parameters. Fixed it to work
Timo Sirainen <tss@iki.fi>
parents: 6171
diff changeset
565 return view->v.ext_get_reset_id(view, map, ext_id, reset_id_r);
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
566 }
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
567
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
568 void mail_index_ext_get_size(struct mail_index_map *map, uint32_t ext_id,
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
569 uint32_t *hdr_size_r, uint16_t *record_size_r,
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
570 uint16_t *record_align_r)
3828
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
571 {
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
572 const struct mail_index_ext *ext;
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
573 uint32_t idx;
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
574
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
575 i_assert(map != NULL);
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
576
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
577 if (!mail_index_map_get_ext_idx(map, ext_id, &idx)) {
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
578 /* extension doesn't exist in this index file */
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
579 *hdr_size_r = 0;
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
580 *record_size_r = 0;
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
581 *record_align_r = 0;
6277
5f66277bbe40 mail_index_lookup*() can't fail anymore. Changed several APIs not to return
Timo Sirainen <tss@iki.fi>
parents: 6275
diff changeset
582 return;
3828
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
583 }
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
584
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
585 ext = array_idx(&map->extensions, idx);
14629
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
586 *hdr_size_r = ext->hdr_size;
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
587 *record_size_r = ext->record_size;
c93ca5e46a8a Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents: 14133
diff changeset
588 *record_align_r = ext->record_align;
3828
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
589 }
eba704899933 mail_index_ext_get_size() hadn't been implemented even though it was in
Timo Sirainen <tss@iki.fi>
parents: 3827
diff changeset
590
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
591 static struct mail_index_view_vfuncs view_vfuncs = {
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
592 view_close,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
593 view_get_messages_count,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
594 view_get_header,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
595 view_lookup_full,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
596 view_lookup_uid,
6677
90bcf480312d Renamed mail_index_lookup_uid_range() to mail_index_lookup_seq_range(), made
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
597 view_lookup_seq_range,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
598 view_lookup_first,
8549
7b16388a3bb0 mail_get_flags/keywords() now returns updated values if they've been changed within transaction.
Timo Sirainen <tss@iki.fi>
parents: 7880
diff changeset
599 view_lookup_keywords,
6420
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
600 view_lookup_ext_full,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
601 view_get_header_ext,
a8b515e1a26f Removed _ prefixes from function names.
Timo Sirainen <tss@iki.fi>
parents: 6411
diff changeset
602 view_ext_get_reset_id
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
603 };
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
604
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
605 struct mail_index_view *
5854
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
606 mail_index_view_open_with_map(struct mail_index *index,
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
607 struct mail_index_map *map)
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
608 {
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
609 struct mail_index_view *view;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
610
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
611 view = i_new(struct mail_index_view, 1);
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
612 view->refcount = 1;
4453
85fcdb478608 Beginnings of joining mail-storage API more closely to mail-index, so that
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4451
diff changeset
613 view->v = view_vfuncs;
5854
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
614 view->index = index;
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
615 view->log_view = mail_transaction_log_view_open(index->log);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
616
5854
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
617 view->indexid = index->indexid;
6377
29f427039e00 fsck won't fail anymore with "corrupted index", all problems are fixed.
Timo Sirainen <tss@iki.fi>
parents: 6349
diff changeset
618 view->inconsistency_id = index->inconsistency_id;
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
619 view->map = map;
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
620 view->map->refcount++;
2884
173a0296e81d Update view's header only after syncing the view. This and other changes fix
Timo Sirainen <tss@iki.fi>
parents: 2853
diff changeset
621
5767
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
622 view->log_file_expunge_seq = view->log_file_head_seq =
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
623 view->map->hdr.log_file_seq;
98a3ab6f8404 Removed no-appends specific code that's unneeded now.
Timo Sirainen <tss@iki.fi>
parents: 5749
diff changeset
624 view->log_file_expunge_offset = view->log_file_head_offset =
5749
420a386fa27a int/ext/mailbox sync offset changes: Combined mailbox and int offsets to
Timo Sirainen <tss@iki.fi>
parents: 5747
diff changeset
625 view->map->hdr.log_file_head_offset;
5569
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
626
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
627 i_array_init(&view->module_contexts,
def1b9bd5466 mail_index_view.module_contexts array wasn't initialized.
Timo Sirainen <tss@iki.fi>
parents: 5096
diff changeset
628 I_MIN(5, mail_index_module_register.id));
17108
3f352534af56 lib-index: Keep track of views and transactions in linked lists.
Timo Sirainen <tss@iki.fi>
parents: 15775
diff changeset
629 DLLIST_PREPEND(&index->views, view);
2224
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
630 return view;
a816e2d88406 Added mail_index_transaction_get_updated_view() which can be used to access
Timo Sirainen <tss@iki.fi>
parents: 2209
diff changeset
631 }
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
632
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
633 struct mail_index_view *mail_index_view_open(struct mail_index *index)
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
634 {
5854
eca7e29dce0d Rewrite index lock handling.
Timo Sirainen <tss@iki.fi>
parents: 5853
diff changeset
635 return mail_index_view_open_with_map(index, index->map);
5689
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
636 }
c2362f144f15 Initial commit for major index file code cleanup.
Timo Sirainen <tss@iki.fi>
parents: 5569
diff changeset
637
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
638 const struct mail_index_ext *
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
639 mail_index_view_get_ext(struct mail_index_view *view, uint32_t ext_id)
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
640 {
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
641 uint32_t idx;
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
642
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
643 if (!mail_index_map_get_ext_idx(view->map, ext_id, &idx))
6171
635b58fe8287 Added mail_index_ext_get_reset_id() which returns the latest reset_id when
Timo Sirainen <tss@iki.fi>
parents: 6165
diff changeset
644 return NULL;
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
645
3191
0df3f5d71958 Changed many buffers to arrays. Cleans up the code a lot.
Timo Sirainen <tss@iki.fi>
parents: 3016
diff changeset
646 return array_idx(&view->map->extensions, idx);
2853
512dd7d76cdc Removed cache_offset from mail_index_record and changed it to use extension
Timo Sirainen <tss@iki.fi>
parents: 2819
diff changeset
647 }