dovecot-2.1: module_dir_load*(): Support filtering and ignoring ...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Oct 1 17:26:18 EEST 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/976e414d5bf4
changeset: 13569:976e414d5bf4
user: Timo Sirainen <tss at iki.fi>
date: Sat Oct 01 17:22:44 2011 +0300
description:
module_dir_load*(): Support filtering and ignoring missing modules.
diffstat:
src/lib/module-dir.c | 11 ++++++++---
src/lib/module-dir.h | 6 ++++++
2 files changed, 14 insertions(+), 3 deletions(-)
diffs (58 lines):
diff -r 406a1d52390b -r 976e414d5bf4 src/lib/module-dir.c
--- a/src/lib/module-dir.c Sat Oct 01 17:09:00 2011 +0300
+++ b/src/lib/module-dir.c Sat Oct 01 17:22:44 2011 +0300
@@ -263,8 +263,13 @@
return strcmp(s1, s2);
}
-static bool module_want_load(const char **names, const char *name)
+static bool module_want_load(const struct module_dir_load_settings *set,
+ const char **names, const char *name)
{
+ if (set->filter_callback != NULL) {
+ if (!set->filter_callback(name, set->filter_context))
+ return FALSE;
+ }
if (names == NULL)
return TRUE;
@@ -412,7 +417,7 @@
name = names_p[i];
stripped_name = module_file_get_name(name);
suffixless_name = module_name_drop_suffix(stripped_name);
- if (!module_want_load(module_names, suffixless_name) ||
+ if (!module_want_load(set, module_names, suffixless_name) ||
module_is_loaded(old_modules, suffixless_name))
module = NULL;
else {
@@ -428,7 +433,7 @@
}
} T_END;
- if (module_names != NULL) {
+ if (module_names != NULL && !set->ignore_missing) {
/* make sure all modules were found */
for (; *module_names != NULL; module_names++) {
if (**module_names != '\0') {
diff -r 406a1d52390b -r 976e414d5bf4 src/lib/module-dir.h
--- a/src/lib/module-dir.h Sat Oct 01 17:09:00 2011 +0300
+++ b/src/lib/module-dir.h Sat Oct 01 17:22:44 2011 +0300
@@ -11,12 +11,18 @@
/* Setting name used in plugin dependency error message */
const char *setting_name;
+ /* If non-NULL, load only modules where filter_callback returns TRUE */
+ bool (*filter_callback)(const char *name, void *context);
+ void *filter_context;
+
/* Require all plugins to have <plugin_name>_init() function */
unsigned int require_init_funcs:1;
/* Enable debug logging */
unsigned int debug:1;
/* If dlopen() fails for some modules, silently skip it. */
unsigned int ignore_dlopen_errors:1;
+ /* Don't fail if some specified modules weren't found */
+ unsigned int ignore_missing:1;
};
struct module {
More information about the dovecot-cvs
mailing list