mail-storage.c revision c820b702d1eabfd5b029ac168fe769265e541561
8e47d6ce64ae5a3392b4d92867b2a83bd0dc9bbeEugen Kuksa/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
a847d9812b328c048773e705606b10875a929034Eugen Kuksastruct mail_storage_module_register mail_storage_module_register = { 0 };
a847d9812b328c048773e705606b10875a929034Eugen Kuksastruct mail_module_register mail_module_register = { 0 };
a847d9812b328c048773e705606b10875a929034Eugen Kuksastruct mail_storage_mail_index_module mail_storage_mail_index_module =
a847d9812b328c048773e705606b10875a929034Eugen Kuksa MODULE_CONTEXT_INIT(&mail_index_module_register);
a847d9812b328c048773e705606b10875a929034Eugen Kuksavoid (*hook_mail_storage_created)(struct mail_storage *storage);
a847d9812b328c048773e705606b10875a929034Eugen Kuksavoid (*hook_mailbox_allocated)(struct mailbox *box) = NULL;
a847d9812b328c048773e705606b10875a929034Eugen Kuksavoid (*hook_mailbox_index_opened)(struct mailbox *box) = NULL;
d51cee8257d50d1f2d7c0818d968b32096f6b795Tim Reddehasevoid mail_storage_class_register(struct mail_storage *storage_class)
d51cee8257d50d1f2d7c0818d968b32096f6b795Tim Reddehase i_assert(mail_storage_find_class(storage_class->name) == NULL);
c4cb6bccad9d72c8b284075f716fc9095b3f3be2Tim Reddehase /* append it after the list, so the autodetection order is correct */
d51cee8257d50d1f2d7c0818d968b32096f6b795Tim Reddehase array_append(&mail_storage_classes, &storage_class, 1);
0abeb43875687e94f2d551053ad09eebeff1f7c9Tim Reddehasevoid mail_storage_class_unregister(struct mail_storage *storage_class)
d51cee8257d50d1f2d7c0818d968b32096f6b795Tim Reddehase unsigned int i, count;
d51cee8257d50d1f2d7c0818d968b32096f6b795Tim Reddehase classes = array_get(&mail_storage_classes, &count);
0abeb43875687e94f2d551053ad09eebeff1f7c9Tim Reddehase for (i = 0; i < count; i++) {
a847d9812b328c048773e705606b10875a929034Eugen Kuksastruct mail_storage *mail_storage_find_class(const char *name)
a847d9812b328c048773e705606b10875a929034Eugen Kuksa unsigned int i, count;
a847d9812b328c048773e705606b10875a929034Eugen Kuksa classes = array_get(&mail_storage_classes, &count);
a847d9812b328c048773e705606b10875a929034Eugen Kuksa for (i = 0; i < count; i++) {
419f986abb76f6fce54b71e17f52a1deaa06dbd6Tim Reddehasemail_storage_autodetect(const struct mail_namespace *ns,
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase unsigned int i, count;
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase classes = array_get(&mail_storage_classes, &count);
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase for (i = 0; i < count; i++) {
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehasemail_storage_set_autodetection(const char **data, const char **driver)
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase const char *p;
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase /* check if data is in driver:data format (eg. mbox:~/mail) */
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase while (i_isalnum(*p)) p++;
d9a3935fa80ce492e782d17ec22825d1708dea97Tim Reddehase /* no autodetection if the storage driver is given. */
static struct mail_storage *
const char **error_r)
const char *home;
return storage_class;
return storage_class;
return NULL;
static struct mail_storage *
MAIL_STORAGE_CLASS_FLAG_UNIQUE_ROOT) == 0 ||
return storage;
return NULL;
error_r) < 0)
} T_END;
const char *fmt, ...)
const struct mail_storage_settings *
void *context)
const char *error_string;
return FALSE;
return FALSE;
return TRUE;
T_BEGIN {
} T_END;
return box;
int ret;
T_BEGIN {
} T_END;
if (ret < 0)
bool directory)
struct mail_namespace *
return FALSE;
struct mailbox_sync_context *
struct mail_keywords *
const char *const keywords[])
i_unreached();
return kw;
struct mail_keywords *
const char **error_r)
return FALSE;
bool only_with_msgs)
struct mailbox_header_lookup_ctx *
struct mail_search_context *
int ret;
return ret;
bool tryagain;
int ret;
&tryagain)) == 0) {
if (!tryagain)
return ret;
int ret;
if (ret > 0)
return ret;
int ret;
if (ret < 0)
return ret;
struct mailbox_transaction_context *
return trans;
int ret;
return ret;
struct mailbox *
return t->box;
struct mail_save_context *
return ctx;
const char *const *keywords_list;
const char *envelope)
int ret;
if (ret < 0) {
int ret;
return ret;
int ret;
return ret;