dovecot-2.0: lib-lda: mail_deliver_save_open() API changed to re...

dovecot at dovecot.org dovecot at dovecot.org
Fri Jul 16 17:52:07 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/db22952d406a
changeset: 11843:db22952d406a
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jul 16 15:52:04 2010 +0100
description:
lib-lda: mail_deliver_save_open() API changed to return also error code.

diffstat:

 src/lib-lda/mail-deliver.c |  22 ++++++++++++----------
 src/lib-lda/mail-deliver.h |   3 ++-
 2 files changed, 14 insertions(+), 11 deletions(-)

diffs (90 lines):

diff -r ff034cc11785 -r db22952d406a src/lib-lda/mail-deliver.c
--- a/src/lib-lda/mail-deliver.c	Fri Jul 16 15:45:10 2010 +0100
+++ b/src/lib-lda/mail-deliver.c	Fri Jul 16 15:52:04 2010 +0100
@@ -95,23 +95,24 @@
 
 int mail_deliver_save_open(struct mail_deliver_save_open_context *ctx,
 			   const char *name, struct mailbox **box_r,
-			   const char **error_r)
+			   enum mail_error *error_r, const char **error_str_r)
 {
 	struct mail_namespace *ns;
 	struct mail_storage *storage;
 	struct mailbox *box;
-	enum mail_error error;
 	enum mailbox_flags flags =
 		MAILBOX_FLAG_KEEP_RECENT | MAILBOX_FLAG_SAVEONLY |
 		MAILBOX_FLAG_POST_SESSION;
 
 	*box_r = NULL;
-	*error_r = NULL;
+	*error_r = MAIL_ERROR_NONE;
+	*error_str_r = NULL;
 
 	name = mailbox_name_to_mutf7(name);
 	ns = mail_namespace_find(ctx->user->namespaces, &name);
 	if (ns == NULL) {
-		*error_r = "Unknown namespace";
+		*error_str_r = "Unknown namespace";
+		*error_r = MAIL_ERROR_PARAMS;
 		return -1;
 	}
 
@@ -133,14 +134,14 @@
 		return 0;
 
 	storage = mailbox_get_storage(box);
-	*error_r = mail_storage_get_last_error(storage, &error);
-	if (!ctx->lda_mailbox_autocreate || error != MAIL_ERROR_NOTFOUND)
+	*error_str_r = mail_storage_get_last_error(storage, error_r);
+	if (!ctx->lda_mailbox_autocreate || *error_r != MAIL_ERROR_NOTFOUND)
 		return -1;
 
 	/* try creating it. */
 	if (mailbox_create(box, NULL, FALSE) < 0) {
-		*error_r = mail_storage_get_last_error(storage, &error);
-		if (error != MAIL_ERROR_EXISTS)
+		*error_str_r = mail_storage_get_last_error(storage, error_r);
+		if (*error_r != MAIL_ERROR_EXISTS)
 			return -1;
 		/* someone else just created it */
 	}
@@ -151,7 +152,7 @@
 
 	/* and try opening again */
 	if (mailbox_sync(box, 0) < 0) {
-		*error_r = mail_storage_get_last_error(storage, &error);
+		*error_str_r = mail_storage_get_last_error(storage, error_r);
 		return -1;
 	}
 	return 0;
@@ -186,7 +187,8 @@
 	open_ctx.lda_mailbox_autosubscribe = ctx->set->lda_mailbox_autosubscribe;
 
 	mailbox_name = str_sanitize(mailbox, 80);
-	if (mail_deliver_save_open(&open_ctx, mailbox, &box, &errstr) < 0) {
+	if (mail_deliver_save_open(&open_ctx, mailbox, &box,
+				   &error, &errstr) < 0) {
 		if (box != NULL)
 			mailbox_free(&box);
 		mail_deliver_log(ctx, "save failed to %s: %s",
diff -r ff034cc11785 -r db22952d406a src/lib-lda/mail-deliver.h
--- a/src/lib-lda/mail-deliver.h	Fri Jul 16 15:45:10 2010 +0100
+++ b/src/lib-lda/mail-deliver.h	Fri Jul 16 15:52:04 2010 +0100
@@ -2,6 +2,7 @@
 #define MAIL_DELIVER_H
 
 enum mail_flags;
+enum mail_error;
 struct mail_storage;
 struct mailbox;
 
@@ -60,7 +61,7 @@
    be returned even with -1, and the caller must free it then. */
 int mail_deliver_save_open(struct mail_deliver_save_open_context *ctx,
 			   const char *name, struct mailbox **box_r,
-			   const char **error_r);
+			   enum mail_error *error_r, const char **error_str_r);
 int mail_deliver_save(struct mail_deliver_context *ctx, const char *mailbox,
 		      enum mail_flags flags, const char *const *keywords,
 		      struct mail_storage **storage_r);


More information about the dovecot-cvs mailing list