dovecot: mail_index_lookup*() can't fail anymore. Changed severa...

dovecot at dovecot.org dovecot at dovecot.org
Sun Aug 12 18:03:06 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/5f66277bbe40
changeset: 6277:5f66277bbe40
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Aug 12 18:02:29 2007 +0300
description:
mail_index_lookup*() can't fail anymore. Changed several APIs not to return
failure anymore.

diffstat:

42 files changed, 459 insertions(+), 570 deletions(-)
src/deliver/deliver.c                              |    3 
src/imap/cmd-store.c                               |   27 +---
src/imap/imap-expunge.c                            |   19 --
src/imap/imap-fetch.c                              |    3 
src/imap/imap-sync.c                               |    6 
src/imap/imap-thread.c                             |    3 
src/lib-index/mail-cache-lookup.c                  |    5 
src/lib-index/mail-index-sync.c                    |   10 -
src/lib-index/mail-index-transaction-view.c        |   54 ++++----
src/lib-index/mail-index-transaction.c             |    4 
src/lib-index/mail-index-view-private.h            |   12 -
src/lib-index/mail-index-view.c                    |  135 ++++++++++----------
src/lib-index/mail-index.h                         |   41 +++---
src/lib-storage/index/cydir/cydir-save.c           |    3 
src/lib-storage/index/dbox/dbox-file.c             |   21 +--
src/lib-storage/index/dbox/dbox-save.c             |    3 
src/lib-storage/index/index-mail.c                 |   71 ++++------
src/lib-storage/index/index-mail.h                 |   14 +-
src/lib-storage/index/index-search.c               |   28 +---
src/lib-storage/index/index-sort.c                 |   62 +++------
src/lib-storage/index/index-sort.h                 |   10 -
src/lib-storage/index/maildir/maildir-save.c       |    3 
src/lib-storage/index/maildir/maildir-sync-index.c |   26 +--
src/lib-storage/index/mbox/mbox-file.c             |   14 --
src/lib-storage/index/mbox/mbox-save.c             |    3 
src/lib-storage/index/mbox/mbox-sync-parse.c       |   11 -
src/lib-storage/index/mbox/mbox-sync-private.h     |    4 
src/lib-storage/index/mbox/mbox-sync.c             |  133 ++++++-------------
src/lib-storage/list/index-mailbox-list-sync.c     |   20 +-
src/lib-storage/list/index-mailbox-list.c          |    4 
src/lib-storage/mail-storage-private.h             |   15 +-
src/lib-storage/mail-storage.h                     |   17 +-
src/lib-storage/mail.c                             |   20 +-
src/plugins/acl/acl-mailbox.c                      |   83 ++++++++----
src/plugins/expire/expire-plugin.c                 |   45 ++----
src/plugins/expire/expire-tool.c                   |   13 -
src/plugins/fts/fts-storage.c                      |    8 -
src/plugins/lazy-expunge/lazy-expunge-plugin.c     |   27 ++--
src/plugins/mail-log/mail-log-plugin.c             |   19 +-
src/plugins/quota/quota-storage.c                  |    9 -
src/plugins/trash/trash-plugin.c                   |    4 
src/pop3/commands.c                                |   17 --

diffs (truncated from 2293 to 300 lines):

diff -r b5a23c868935 -r 5f66277bbe40 src/deliver/deliver.c
--- a/src/deliver/deliver.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/deliver/deliver.c	Sun Aug 12 18:02:29 2007 +0300
@@ -749,8 +749,7 @@ int main(int argc, char *argv[])
 
 	t = mailbox_transaction_begin(box, 0);
 	mail = mail_alloc(t, 0, NULL);
-	if (mail_set_seq(mail, 1) < 0)
-		i_fatal("mail_set_seq() failed");
+	mail_set_seq(mail, 1);
 
 	storage = NULL;
 	default_mailbox_name = mailbox;
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/cmd-store.c
--- a/src/imap/cmd-store.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/cmd-store.c	Sun Aug 12 18:02:29 2007 +0300
@@ -92,36 +92,23 @@ bool cmd_store(struct client_command_con
 		mailbox_keywords_create(t, keywords_list) : NULL;
 	search_ctx = mailbox_search_init(t, NULL, search_arg, NULL);
 
-	failed = FALSE;
 	mail = mail_alloc(t, MAIL_FETCH_FLAGS, NULL);
 	while (mailbox_search_next(search_ctx, mail) > 0) {
-		if (modify_type == MODIFY_REPLACE || flags != 0) {
-			if (mail_update_flags(mail, modify_type, flags) < 0) {
-				failed = TRUE;
-				break;
-			}
-		}
-		if (modify_type == MODIFY_REPLACE || keywords != NULL) {
-			if (mail_update_keywords(mail, modify_type,
-						 keywords) < 0) {
-				failed = TRUE;
-				break;
-			}
-		}
+		if (modify_type == MODIFY_REPLACE || flags != 0)
+			mail_update_flags(mail, modify_type, flags);
+		if (modify_type == MODIFY_REPLACE || keywords != NULL)
+			mail_update_keywords(mail, modify_type, keywords);
 	}
 	mail_free(&mail);
 
 	if (keywords != NULL)
 		mailbox_keywords_free(t, &keywords);
 
-	if (mailbox_search_deinit(&search_ctx) < 0)
+	if (mailbox_search_deinit(&search_ctx) < 0) {
 		failed = TRUE;
-
-	if (failed)
 		mailbox_transaction_rollback(&t);
-	else {
-		if (mailbox_transaction_commit(&t, 0) < 0)
-			failed = TRUE;
+	} else {
+		failed = mailbox_transaction_commit(&t, 0) < 0;
 	}
 
 	if (!failed) {
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-expunge.c
--- a/src/imap/imap-expunge.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-expunge.c	Sun Aug 12 18:02:29 2007 +0300
@@ -12,7 +12,7 @@ bool imap_expunge(struct mailbox *box, s
 	struct mail *mail;
 	struct mail_search_arg search_arg;
         enum mailbox_sync_flags flags;
-	bool failed = FALSE;
+	bool failed;
 
 	if (mailbox_is_readonly(box)) {
 		/* silently ignore */
@@ -27,24 +27,17 @@ bool imap_expunge(struct mailbox *box, s
 	ctx = mailbox_search_init(t, NULL, &search_arg, NULL);
 
 	mail = mail_alloc(t, 0, NULL);
-	while (mailbox_search_next(ctx, mail) > 0) {
-		if (mail_expunge(mail) < 0) {
-			failed = TRUE;
-			break;
-		}
-	}
+	while (mailbox_search_next(ctx, mail) > 0)
+		mail_expunge(mail);
 	mail_free(&mail);
 
-	if (mailbox_search_deinit(&ctx) < 0)
+	if (mailbox_search_deinit(&ctx) < 0) {
 		failed = TRUE;
-
-	if (failed)
 		mailbox_transaction_rollback(&t);
-	else {
+	} else {
 		flags = MAILBOX_SYNC_FLAG_FULL_READ |
 			MAILBOX_SYNC_FLAG_FULL_WRITE;
-		if (mailbox_transaction_commit(&t, flags) < 0)
-			failed = TRUE;
+		failed = mailbox_transaction_commit(&t, flags) < 0;
 	}
 
 	return !failed;
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-fetch.c	Sun Aug 12 18:02:29 2007 +0300
@@ -514,8 +514,7 @@ static int fetch_flags(struct imap_fetch
 	if (ctx->flags_update_seen && (flags & MAIL_SEEN) == 0) {
 		/* Add \Seen flag */
 		flags |= MAIL_SEEN;
-		if (mail_update_flags(mail, MODIFY_ADD, MAIL_SEEN) < 0)
-			return -1;
+		mail_update_flags(mail, MODIFY_ADD, MAIL_SEEN);
 	} else if (ctx->flags_show_only_seen_changes) {
 		return 1;
 	}
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-sync.c
--- a/src/imap/imap-sync.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-sync.c	Sun Aug 12 18:02:29 2007 +0300
@@ -143,11 +143,7 @@ int imap_sync_more(struct imap_sync_cont
 				if (ret <= 0)
 					break;
 
-				if (mail_set_seq(ctx->mail, ctx->seq) < 0) {
-					t_pop();
-					return -1;
-				}
-
+				mail_set_seq(ctx->mail, ctx->seq);
 				flags = mail_get_flags(ctx->mail);
 				keywords = mail_get_keywords(ctx->mail);
 
diff -r b5a23c868935 -r 5f66277bbe40 src/imap/imap-thread.c
--- a/src/imap/imap-thread.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/imap/imap-thread.c	Sun Aug 12 18:02:29 2007 +0300
@@ -691,7 +691,8 @@ static void gather_base_subjects(struct 
 		else
 			mailbox_get_uids(ctx->box, id, id, &seq, &seq);
 
-		if (seq != 0 && mail_set_seq(ctx->mail, seq) == 0) {
+		if (seq != 0) {
+			mail_set_seq(ctx->mail, seq);
 			t_push();
                         subject = mail_get_first_header(ctx->mail, "subject");
 			add_base_subject(ctx, subject, node);
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-cache-lookup.c
--- a/src/lib-index/mail-cache-lookup.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-cache-lookup.c	Sun Aug 12 18:02:29 2007 +0300
@@ -57,9 +57,8 @@ mail_cache_lookup_offset(struct mail_cac
 	uint32_t reset_id;
 	int i, ret;
 
-	if (mail_index_lookup_ext_full(view, seq, cache->ext_id,
-				       &map, &data) < 0)
-		return -1;
+	mail_index_lookup_ext_full(view, seq, cache->ext_id,
+				   &map, &data, NULL);
 	if (data == NULL || *((const uint32_t *)data) == 0) {
 		/* nothing in cache (for this record) */
 		return 0;
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-index-sync.c	Sun Aug 12 18:02:29 2007 +0300
@@ -149,7 +149,7 @@ static bool mail_index_sync_add_transact
 	return TRUE;
 }
 
-static int mail_index_sync_add_dirty_updates(struct mail_index_sync_ctx *ctx)
+static void mail_index_sync_add_dirty_updates(struct mail_index_sync_ctx *ctx)
 {
 	struct mail_transaction_flag_update update;
 	const struct mail_index_record *rec;
@@ -159,16 +159,13 @@ static int mail_index_sync_add_dirty_upd
 
 	messages_count = mail_index_view_get_messages_count(ctx->view);
 	for (seq = 1; seq <= messages_count; seq++) {
-		if (mail_index_lookup(ctx->view, seq, &rec) < 0)
-			return -1;
-
+		rec = mail_index_lookup(ctx->view, seq);
 		if ((rec->flags & MAIL_INDEX_MAIL_FLAG_DIRTY) == 0)
 			continue;
 
 		mail_index_update_flags(ctx->sync_trans, rec->uid,
 					MODIFY_REPLACE, rec->flags);
 	}
-	return 0;
 }
 
 static void
@@ -196,8 +193,7 @@ mail_index_sync_read_and_sort(struct mai
 	if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) &&
 	    (ctx->flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) {
 		/* show dirty flags as flag updates */
-		if (mail_index_sync_add_dirty_updates(ctx) < 0)
-			return -1;
+		mail_index_sync_add_dirty_updates(ctx);
 	}
 
 	/* read all transactions from log into a transaction in memory.
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-transaction-view.c
--- a/src/lib-index/mail-index-transaction-view.c	Sun Aug 12 16:50:47 2007 +0300
+++ b/src/lib-index/mail-index-transaction-view.c	Sun Aug 12 18:02:29 2007 +0300
@@ -60,30 +60,29 @@ _tview_get_header(struct mail_index_view
 	return hdr;
 }
 
-static int _tview_lookup_full(struct mail_index_view *view, uint32_t seq,
-			      struct mail_index_map **map_r,
-			      const struct mail_index_record **rec_r)
-{
-	struct mail_index_view_transaction *tview =
-                (struct mail_index_view_transaction *)view;
-	int ret;
+static const struct mail_index_record *
+_tview_lookup_full(struct mail_index_view *view, uint32_t seq,
+		   struct mail_index_map **map_r, bool *expunged_r)
+{
+	struct mail_index_view_transaction *tview =
+                (struct mail_index_view_transaction *)view;
+	const struct mail_index_record *rec;
 
 	if (seq >= tview->t->first_new_seq) {
 		/* FIXME: is this right to return index map..?
 		   it's not there yet. */
 		*map_r = view->index->map;
-		*rec_r = mail_index_transaction_lookup(tview->t, seq);
-		return 1;
-	}
-
-	ret = tview->super->lookup_full(view, seq, map_r, rec_r);
-	if (ret <= 0)
-		return ret;
+		*expunged_r = FALSE;
+		return mail_index_transaction_lookup(tview->t, seq);
+	}
+
+	rec = tview->super->lookup_full(view, seq, map_r, expunged_r);
 
 	/* if we're expunged within this transaction, return 0 */
-	return array_is_created(&tview->t->expunges) &&
-		seq_range_exists(&tview->t->expunges, seq) ? 0 : 1;
-
+	if (array_is_created(&tview->t->expunges) &&
+	    seq_range_exists(&tview->t->expunges, seq))
+		*expunged_r = TRUE;
+	return rec;
 }
 
 static void _tview_lookup_uid(struct mail_index_view *view, uint32_t seq,
@@ -176,10 +175,10 @@ tview_get_lookup_map(struct mail_index_v
 	return tview->lookup_map;
 }
 
-static int
+static void
 _tview_lookup_ext_full(struct mail_index_view *view, uint32_t seq,
 		       uint32_t ext_id, struct mail_index_map **map_r,
-		       const void **data_r)
+		       const void **data_r, bool *expunged_r)
 {
 	struct mail_index_view_transaction *tview =
 		(struct mail_index_view_transaction *)view;
@@ -188,6 +187,8 @@ _tview_lookup_ext_full(struct mail_index
 	unsigned int idx;
 
 	i_assert(ext_id < array_count(&view->index->extensions));
+
+	*expunged_r = FALSE;
 
 	if (array_is_created(&tview->t->ext_rec_updates) &&
 	    ext_id < array_count(&tview->t->ext_rec_updates)) {
@@ -199,19 +200,18 @@ _tview_lookup_ext_full(struct mail_index
 			data = array_idx(ext_buf, idx);
 			*map_r = tview_get_lookup_map(tview);
 			*data_r = CONST_PTR_OFFSET(data, sizeof(uint32_t));
-			return 1;
+			return;
 		}
 	}
 
 	/* not updated, return the existing value */
 	if (seq < tview->t->first_new_seq) {
-		return tview->super->lookup_ext_full(view, seq, ext_id,
-						     map_r, data_r);
-	}
-
-	*map_r = view->index->map;
-	*data_r = NULL;
-	return 1;
+		tview->super->lookup_ext_full(view, seq, ext_id,
+					      map_r, data_r, expunged_r);
+	} else {
+		*map_r = view->index->map;
+		*data_r = NULL;
+	}
 }
 
 static void _tview_get_header_ext(struct mail_index_view *view,
diff -r b5a23c868935 -r 5f66277bbe40 src/lib-index/mail-index-transaction.c
--- a/src/lib-index/mail-index-transaction.c	Sun Aug 12 16:50:47 2007 +0300


More information about the dovecot-cvs mailing list