dovecot-1.2: IMAP: Register FETCH handlers at startup so we don'...
dovecot at dovecot.org
dovecot at dovecot.org
Thu May 21 19:55:11 EEST 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/106e4e3dccbc
changeset: 9071:106e4e3dccbc
user: Timo Sirainen <tss at iki.fi>
date: Thu May 21 12:55:06 2009 -0400
description:
IMAP: Register FETCH handlers at startup so we don't break if plugins add them.
diffstat:
3 files changed, 21 insertions(+), 13 deletions(-)
src/imap/imap-fetch.c | 28 +++++++++++++++-------------
src/imap/imap-fetch.h | 3 +++
src/imap/main.c | 3 +++
diffs (101 lines):
diff -r b57a14e489b3 -r 106e4e3dccbc src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c Thu May 21 12:46:17 2009 -0400
+++ b/src/imap/imap-fetch.c Thu May 21 12:55:06 2009 -0400
@@ -22,10 +22,7 @@
#define ENVELOPE_NIL_REPLY \
"(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
-#define IMAP_FETCH_HANDLER_COUNT 11
-extern const struct imap_fetch_handler
- imap_fetch_default_handlers[IMAP_FETCH_HANDLER_COUNT];
-static buffer_t *fetch_handlers = NULL;
+static buffer_t *fetch_handlers;
static int imap_fetch_handler_cmp(const void *p1, const void *p2)
{
@@ -40,8 +37,6 @@ void imap_fetch_handlers_register(const
void *data;
size_t size;
- if (fetch_handlers == NULL)
- fetch_handlers = buffer_create_dynamic(default_pool, 128);
buffer_append(fetch_handlers, handlers, sizeof(*handlers) * count);
data = buffer_get_modifiable_data(fetch_handlers, &size);
@@ -90,11 +85,6 @@ imap_fetch_init(struct client_command_co
{
struct client *client = cmd->client;
struct imap_fetch_context *ctx;
-
- if (fetch_handlers == NULL) {
- imap_fetch_handlers_register(imap_fetch_default_handlers,
- N_ELEMENTS(imap_fetch_default_handlers));
- }
ctx = p_new(cmd->pool, struct imap_fetch_context, 1);
ctx->client = client;
@@ -845,8 +835,8 @@ fetch_x_savedate_init(struct imap_fetch_
return TRUE;
}
-const struct imap_fetch_handler
-imap_fetch_default_handlers[IMAP_FETCH_HANDLER_COUNT] = {
+static const struct imap_fetch_handler
+imap_fetch_default_handlers[] = {
{ "BODY", fetch_body_init },
{ "BODYSTRUCTURE", fetch_bodystructure_init },
{ "ENVELOPE", fetch_envelope_init },
@@ -859,3 +849,15 @@ imap_fetch_default_handlers[IMAP_FETCH_H
{ "X-MAILBOX", fetch_x_mailbox_init },
{ "X-SAVEDATE", fetch_x_savedate_init }
};
+
+void imap_fetch_handlers_init(void)
+{
+ fetch_handlers = buffer_create_dynamic(default_pool, 128);
+ imap_fetch_handlers_register(imap_fetch_default_handlers,
+ N_ELEMENTS(imap_fetch_default_handlers));
+}
+
+void imap_fetch_handlers_deinit(void)
+{
+ buffer_free(&fetch_handlers);
+}
diff -r b57a14e489b3 -r 106e4e3dccbc src/imap/imap-fetch.h
--- a/src/imap/imap-fetch.h Thu May 21 12:46:17 2009 -0400
+++ b/src/imap/imap-fetch.h Thu May 21 12:55:06 2009 -0400
@@ -113,4 +113,7 @@ bool fetch_rfc822_init(struct imap_fetch
bool fetch_rfc822_init(struct imap_fetch_context *ctx, const char *name,
const struct imap_arg **args);
+void imap_fetch_handlers_init(void);
+void imap_fetch_handlers_deinit(void);
+
#endif
diff -r b57a14e489b3 -r 106e4e3dccbc src/imap/main.c
--- a/src/imap/main.c Thu May 21 12:46:17 2009 -0400
+++ b/src/imap/main.c Thu May 21 12:55:06 2009 -0400
@@ -15,6 +15,7 @@
#include "dict.h"
#include "mail-storage.h"
#include "commands.h"
+#include "imap-fetch.h"
#include "mail-namespace.h"
#include <stdio.h>
@@ -208,6 +209,7 @@ static void main_init(void)
mailbox_list_register_all();
clients_init();
commands_init();
+ imap_fetch_handlers_init();
module_dir_init(modules);
@@ -280,6 +282,7 @@ static void main_deinit(void)
clients_deinit();
module_dir_unload(&modules);
+ imap_fetch_handlers_deinit();
commands_deinit();
mail_storage_deinit();
mail_users_deinit();
More information about the dovecot-cvs
mailing list