Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6171:635b58fe8287 HEAD
Added mail_index_ext_get_reset_id() which returns the latest reset_id when
using transaction views.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Aug 2007 17:28:55 +0300 |
parents | 808c43283c98 |
children | b31c368b150b |
files | src/lib-index/mail-index-dummy-view.c src/lib-index/mail-index-transaction-view.c src/lib-index/mail-index-view-private.h src/lib-index/mail-index-view.c src/lib-index/mail-index.h |
diffstat | 5 files changed, 48 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-dummy-view.c Mon Aug 06 17:12:08 2007 +0300 +++ b/src/lib-index/mail-index-dummy-view.c Mon Aug 06 17:28:55 2007 +0300 @@ -28,6 +28,7 @@ NULL, NULL, NULL, + NULL, NULL };
--- a/src/lib-index/mail-index-transaction-view.c Mon Aug 06 17:12:08 2007 +0300 +++ b/src/lib-index/mail-index-transaction-view.c Mon Aug 06 17:28:55 2007 +0300 @@ -221,6 +221,23 @@ data_r, data_size_r); } +static bool _tview_ext_get_reset_id(struct mail_index_view *view, + uint32_t ext_id, uint32_t *reset_id_r) +{ + struct mail_index_view_transaction *tview = + (struct mail_index_view_transaction *)view; + const uint32_t *reset_id_p; + + if (array_is_created(&tview->t->ext_reset_ids) && + ext_id < array_count(&tview->t->ext_reset_ids)) { + reset_id_p = array_idx(&tview->t->ext_reset_ids, ext_id); + *reset_id_r = *reset_id_p; + return TRUE; + } + + return tview->super->ext_get_reset_id(view, ext_id, reset_id_r); +} + static struct mail_index_view_vfuncs trans_view_vfuncs = { _tview_close, _tview_get_message_count, @@ -230,7 +247,8 @@ _tview_lookup_uid_range, _tview_lookup_first, _tview_lookup_ext_full, - _tview_get_header_ext + _tview_get_header_ext, + _tview_ext_get_reset_id }; struct mail_index_view *
--- a/src/lib-index/mail-index-view-private.h Mon Aug 06 17:12:08 2007 +0300 +++ b/src/lib-index/mail-index-view-private.h Mon Aug 06 17:28:55 2007 +0300 @@ -31,6 +31,8 @@ int (*get_header_ext)(struct mail_index_view *view, struct mail_index_map *map, uint32_t ext_id, const void **data_r, size_t *data_size_r); + bool (*ext_get_reset_id)(struct mail_index_view *view, + uint32_t ext_id, uint32_t *reset_id_r); }; union mail_index_view_module_context {
--- a/src/lib-index/mail-index-view.c Mon Aug 06 17:12:08 2007 +0300 +++ b/src/lib-index/mail-index-view.c Mon Aug 06 17:28:55 2007 +0300 @@ -426,6 +426,20 @@ return 0; } +static bool _view_ext_get_reset_id(struct mail_index_view *view, + uint32_t ext_id, uint32_t *reset_id_r) +{ + const struct mail_index_ext *ext; + uint32_t idx; + + if (!mail_index_map_get_ext_idx(view->map, ext_id, &idx)) + return FALSE; + + ext = array_idx(&view->map->extensions, idx); + *reset_id_r = ext->reset_id; + return TRUE; +} + void mail_index_view_close(struct mail_index_view **_view) { struct mail_index_view *view = *_view; @@ -589,6 +603,12 @@ return view->v.get_header_ext(view, map, ext_id, data_r, data_size_r); } +bool mail_index_ext_get_reset_id(struct mail_index_view *view, + uint32_t ext_id, uint32_t *reset_id_r) +{ + return view->v.ext_get_reset_id(view, ext_id, reset_id_r); +} + int mail_index_ext_get_size(struct mail_index_view *view __attr_unused__, uint32_t ext_id, struct mail_index_map *map, uint32_t *hdr_size_r, uint16_t *record_size_r, @@ -629,7 +649,8 @@ _view_lookup_uid_range, _view_lookup_first, _view_lookup_ext_full, - _view_get_header_ext + _view_get_header_ext, + _view_ext_get_reset_id }; struct mail_index_view * @@ -669,7 +690,7 @@ uint32_t idx; if (!mail_index_map_get_ext_idx(view->map, ext_id, &idx)) - return 0; + return NULL; return array_idx(&view->map->extensions, idx); }
--- a/src/lib-index/mail-index.h Mon Aug 06 17:12:08 2007 +0300 +++ b/src/lib-index/mail-index.h Mon Aug 06 17:28:55 2007 +0300 @@ -407,6 +407,9 @@ clear any existing record or header data. */ void mail_index_ext_set_reset_id(struct mail_index_transaction *t, uint32_t ext_id, uint32_t reset_id); +/* Get the current reset_id for given extension. Returns TRUE if it exists. */ +bool mail_index_ext_get_reset_id(struct mail_index_view *view, + uint32_t ext_id, uint32_t *reset_id_r); /* Returns extension header. */ int mail_index_get_header_ext(struct mail_index_view *view, uint32_t ext_id,