dovecot-2.2: lib-storage: Partially reverted the mail.get_real_m...

dovecot at dovecot.org dovecot at dovecot.org
Wed Apr 30 14:38:28 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/5c4205a95028
changeset: 17297:5c4205a95028
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Apr 30 17:37:43 2014 +0300
description:
lib-storage: Partially reverted the mail.get_real_mail() API change for backwards compatibility.
I hadn't realized Pigeonhole was also using it. (I thought it was using only
the mail_get_real_mail() public API.) This fixes Pigeonhole v0.4.2 to work
again.

diffstat:

 src/lib-storage/fail-mail.c            |   5 ++---
 src/lib-storage/index/index-mail.c     |   5 ++---
 src/lib-storage/index/index-mail.h     |   2 +-
 src/lib-storage/mail-storage-private.h |   5 ++++-
 src/lib-storage/mail.c                 |   3 ++-
 src/plugins/virtual/virtual-mail.c     |  11 ++++++-----
 6 files changed, 17 insertions(+), 14 deletions(-)

diffs (98 lines):

diff -r 99a4788770cb -r 5c4205a95028 src/lib-storage/fail-mail.c
--- a/src/lib-storage/fail-mail.c	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/lib-storage/fail-mail.c	Wed Apr 30 17:37:43 2014 +0300
@@ -196,10 +196,9 @@
 	return -1;
 }
 
-static int fail_mail_get_real_mail(struct mail *mail, struct mail **real_mail_r)
+static struct mail * fail_mail_get_real_mail(struct mail *mail)
 {
-	*real_mail_r = mail;
-	return 0;
+	return mail;
 }
 
 static void
diff -r 99a4788770cb -r 5c4205a95028 src/lib-storage/index/index-mail.c
--- a/src/lib-storage/index/index-mail.c	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/lib-storage/index/index-mail.c	Wed Apr 30 17:37:43 2014 +0300
@@ -1211,10 +1211,9 @@
 	}
 }
 
-int index_mail_get_real_mail(struct mail *mail, struct mail **real_mail_r)
+struct mail *index_mail_get_real_mail(struct mail *mail)
 {
-	*real_mail_r = mail;
-	return 0;
+	return mail;
 }
 
 struct mail *
diff -r 99a4788770cb -r 5c4205a95028 src/lib-storage/index/index-mail.h
--- a/src/lib-storage/index/index-mail.h	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/lib-storage/index/index-mail.h	Wed Apr 30 17:37:43 2014 +0300
@@ -216,7 +216,7 @@
 				 struct istream **stream_r);
 int index_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
 			   const char **value_r);
-int index_mail_get_real_mail(struct mail *mail, struct mail **real_mail_r);
+struct mail *index_mail_get_real_mail(struct mail *mail);
 
 void index_mail_update_flags(struct mail *mail, enum modify_type modify_type,
 			     enum mail_flags flags);
diff -r 99a4788770cb -r 5c4205a95028 src/lib-storage/mail-storage-private.h
--- a/src/lib-storage/mail-storage-private.h	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/lib-storage/mail-storage-private.h	Wed Apr 30 17:37:43 2014 +0300
@@ -391,7 +391,10 @@
 
 	int (*get_special)(struct mail *mail, enum mail_fetch_field field,
 			   const char **value_r);
-	int (*get_real_mail)(struct mail *mail, struct mail **real_mail_r);
+	/* FIXME: v2.3 API should change this to return -1 on failure.
+	   for now NULL means failure so we don't break backwards
+	   compatibility. */
+	struct mail *(*get_real_mail)(struct mail *mail);
 
 	void (*update_flags)(struct mail *mail, enum modify_type modify_type,
 			     enum mail_flags flags);
diff -r 99a4788770cb -r 5c4205a95028 src/lib-storage/mail.c
--- a/src/lib-storage/mail.c	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/lib-storage/mail.c	Wed Apr 30 17:37:43 2014 +0300
@@ -276,7 +276,8 @@
 {
 	struct mail_private *p = (struct mail_private *)mail;
 
-	return p->v.get_real_mail(mail, real_mail_r);
+	*real_mail_r = p->v.get_real_mail(mail);
+	return *real_mail_r == NULL ? -1 : 0;
 }
 
 struct mail *mail_get_real_mail(struct mail *mail)
diff -r 99a4788770cb -r 5c4205a95028 src/plugins/virtual/virtual-mail.c
--- a/src/plugins/virtual/virtual-mail.c	Wed Apr 30 06:08:46 2014 +0300
+++ b/src/plugins/virtual/virtual-mail.c	Wed Apr 30 17:37:43 2014 +0300
@@ -430,16 +430,17 @@
 	return 0;
 }
 
-static int
-virtual_mail_get_real_mail(struct mail *mail, struct mail **real_mail_r)
+static struct mail *virtual_mail_get_real_mail(struct mail *mail)
 {
 	struct virtual_mail *vmail = (struct virtual_mail *)mail;
-	struct mail *backend_mail;
+	struct mail *backend_mail, *real_mail;
 
 	if (backend_mail_get(vmail, &backend_mail) < 0)
-		return -1;
+		return NULL;
 
-	return mail_get_backend_mail(backend_mail, real_mail_r);
+	if (mail_get_backend_mail(backend_mail, &real_mail) < 0)
+		return NULL;
+	return real_mail;
 }
 
 static void virtual_mail_update_pop3_uidl(struct mail *mail, const char *uidl)


More information about the dovecot-cvs mailing list