dovecot: Added mail_index_ext_get_reset_id() which returns the l...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Aug 6 17:30:08 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/635b58fe8287
changeset: 6171:635b58fe8287
user: Timo Sirainen <tss at iki.fi>
date: Mon Aug 06 17:28:55 2007 +0300
description:
Added mail_index_ext_get_reset_id() which returns the latest reset_id when
using transaction views.
diffstat:
5 files changed, 48 insertions(+), 3 deletions(-)
src/lib-index/mail-index-dummy-view.c | 1 +
src/lib-index/mail-index-transaction-view.c | 20 +++++++++++++++++++-
src/lib-index/mail-index-view-private.h | 2 ++
src/lib-index/mail-index-view.c | 25 +++++++++++++++++++++++--
src/lib-index/mail-index.h | 3 +++
diffs (129 lines):
diff -r 808c43283c98 -r 635b58fe8287 src/lib-index/mail-index-dummy-view.c
--- 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 @@ static struct mail_index_view_vfuncs dum
NULL,
NULL,
NULL,
+ NULL,
NULL
};
diff -r 808c43283c98 -r 635b58fe8287 src/lib-index/mail-index-transaction-view.c
--- 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 @@ static int _tview_get_header_ext(struct
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 @@ static struct mail_index_view_vfuncs tra
_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 *
diff -r 808c43283c98 -r 635b58fe8287 src/lib-index/mail-index-view-private.h
--- 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 @@ struct mail_index_view_vfuncs {
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 {
diff -r 808c43283c98 -r 635b58fe8287 src/lib-index/mail-index-view.c
--- 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 @@ static int _view_get_header_ext(struct m
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;
@@ -587,6 +601,12 @@ int mail_index_map_get_header_ext(struct
const void **data_r, size_t *data_size_r)
{
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__,
@@ -629,7 +649,8 @@ static struct mail_index_view_vfuncs vie
_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 @@ mail_index_view_get_ext(struct mail_inde
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);
}
diff -r 808c43283c98 -r 635b58fe8287 src/lib-index/mail-index.h
--- 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 @@ void mail_index_ext_reset(struct mail_in
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,
More information about the dovecot-cvs
mailing list