Mercurial > dovecot > core-2.2
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 |
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 | 32 if (src->log_view != NULL) { |
33 dest->log_view = | |
34 mail_transaction_log_view_open(src->index->log); | |
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 | 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 | 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 | 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 | 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 | 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 | 214 } |
215 | |
3824
3e756ea0474b
Comment updates, small cleanups and optimizations.
Timo Sirainen <tss@iki.fi>
parents:
3823
diff
changeset
|
216 map = view->index->map; |
2116 | 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 | 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 | 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 | 606 mail_index_view_open_with_map(struct mail_index *index, |
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 | 614 view->index = index; |
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 | 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 | 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 } |