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