aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--antispam-plugin.c5
-rw-r--r--antispam-plugin.h32
-rw-r--r--mailtrain.c13
3 files changed, 36 insertions, 14 deletions
diff --git a/antispam-plugin.c b/antispam-plugin.c
index fdde26d..2e6449d 100644
--- a/antispam-plugin.c
+++ b/antispam-plugin.c
@@ -40,9 +40,8 @@ extern void (*hook_mail_storage_created)(struct mail_storage *storage);
/* internal stuff we need */
#include "antispam-plugin.h"
-#ifdef CONFIG_DOVECOT_11
-uint32_t PLUGIN_FUNCTION(id) = 0;
-#endif
+/* macro since only needed for dovecot 1.1 */
+PLUGIN_ID;
static pool_t global_pool;
static char **trash_folders = NULL;
diff --git a/antispam-plugin.h b/antispam-plugin.h
index d6e05ca..dfe4445 100644
--- a/antispam-plugin.h
+++ b/antispam-plugin.h
@@ -1,6 +1,7 @@
#ifndef _ANTISPAM_PLUGIN_H
#define _ANTISPAM_PLUGIN_H
+#include "config.h"
#include "lib.h"
#include "str.h"
#include "client.h"
@@ -74,14 +75,45 @@ bool keyword_is_spam(const char *keyword);
extern bool need_keyword_hook;
extern bool need_folder_hook;
+/*
+ * Dovecot version compat code
+ */
+
#if defined(CONFIG_DOVECOT_11)
#define __attr_unused__ ATTR_UNUSED
#define ME(err) MAIL_ERROR_ ##err,
+#define PLUGIN_ID uint32_t PLUGIN_FUNCTION(id) = 0
#define mempool_unref(x) pool_unref(x)
+
+static inline struct istream *get_mail_stream(struct mail *mail)
+{
+ struct istream *result;
+ if (mail_get_stream(mail, NULL, NULL, &result) < 0)
+ return NULL;
+ return result;
+}
+
+static inline struct ostream *
+o_stream_create_from_fd(int fd, pool_t pool ATTR_UNUSED)
+{
+ return o_stream_create_fd(fd, 0, TRUE);
+}
#elif defined(CONFIG_DOVECOT_10)
#define ME(err)
+#define PLUGIN_ID
#define str_array_length(x) strarray_length(x)
#define mempool_unref(x) pool_unref(*(x))
+
+static inline struct istream *get_mail_stream(struct mail *mail)
+{
+ return mail_get_stream(mail, NULL, NULL);
+}
+
+static inline struct ostream *
+o_stream_create_from_fd(int fd, pool_t pool)
+{
+ return o_stream_create_file(fd, pool, 0, TRUE);
+}
#else
#error "Building against this dovecot version is not supported"
#endif
diff --git a/mailtrain.c b/mailtrain.c
index a0e4a40..7156805 100644
--- a/mailtrain.c
+++ b/mailtrain.c
@@ -233,12 +233,7 @@ int backend_handle_mail(struct mailbox_transaction_context *t,
return -1;
}
-#ifdef CONFIG_DOVECOT_11
- if (mail_get_stream(mail, NULL, NULL, &mailstream) < 0)
- mailstream = NULL;
-#else
- mailstream = mail_get_stream(mail, NULL, NULL);
-#endif
+ mailstream = get_mail_stream(mail);
if (!mailstream) {
mail_storage_set_error(t->box->storage,
ME(EXPUNGED)
@@ -262,11 +257,7 @@ int backend_handle_mail(struct mailbox_transaction_context *t,
ast->count++;
-#ifdef CONFIG_DOVECOT_11
- outstream = o_stream_create_fd(fd, 0, TRUE);
-#else
- outstream = o_stream_create_file(fd, t->box->pool, 0, TRUE);
-#endif
+ outstream = o_stream_create_from_fd(fd, t->box->pool);
if (!outstream) {
ret = -1;
mail_storage_set_error(t->box->storage,