Mercurial > dovecot > core-2.2
annotate src/lib/module-dir.h @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | 88b09d5912c0 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5186
diff
changeset
|
1 #ifndef MODULE_DIR_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5186
diff
changeset
|
2 #define MODULE_DIR_H |
1466 | 3 |
10422
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
4 struct module_dir_load_settings { |
15199
73916b7be94e
Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
5 /* If abi_version is non-NULL and the module contains a version symbol, |
73916b7be94e
Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
6 fail the load if they're different. In both strings ignore anything |
73916b7be94e
Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
7 after the first '(' character, so the version can be e.g.: |
73916b7be94e
Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
8 2.2.ABIv1(2.2.15) */ |
73916b7be94e
Plugin ABI version checking improvements.
Timo Sirainen <tss@iki.fi>
parents:
14629
diff
changeset
|
9 const char *abi_version; |
11748
10ff5c7e7f40
module_dir_load(): Added support for checking binary name dependency.
Timo Sirainen <tss@iki.fi>
parents:
10858
diff
changeset
|
10 /* Binary name used for checking if plugin is tried to be loaded for |
10ff5c7e7f40
module_dir_load(): Added support for checking binary name dependency.
Timo Sirainen <tss@iki.fi>
parents:
10858
diff
changeset
|
11 wrong binary. */ |
10ff5c7e7f40
module_dir_load(): Added support for checking binary name dependency.
Timo Sirainen <tss@iki.fi>
parents:
10858
diff
changeset
|
12 const char *binary_name; |
11906
02c9154efe81
If module can't be loaded due to missing dependency, suggest a setting how to do it.
Timo Sirainen <tss@iki.fi>
parents:
11748
diff
changeset
|
13 /* Setting name used in plugin dependency error message */ |
02c9154efe81
If module can't be loaded due to missing dependency, suggest a setting how to do it.
Timo Sirainen <tss@iki.fi>
parents:
11748
diff
changeset
|
14 const char *setting_name; |
10422
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
15 |
13569
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
16 /* If non-NULL, load only modules where filter_callback returns TRUE */ |
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
17 bool (*filter_callback)(const char *name, void *context); |
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
18 void *filter_context; |
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
19 |
10422
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
20 /* Require all plugins to have <plugin_name>_init() function */ |
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
21 unsigned int require_init_funcs:1; |
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
22 /* Enable debug logging */ |
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
23 unsigned int debug:1; |
10858
c9dc5c447db5
module_dir_load*(): Added ignore_dlopen_errors flag.
Timo Sirainen <tss@iki.fi>
parents:
10422
diff
changeset
|
24 /* If dlopen() fails for some modules, silently skip it. */ |
c9dc5c447db5
module_dir_load*(): Added ignore_dlopen_errors flag.
Timo Sirainen <tss@iki.fi>
parents:
10422
diff
changeset
|
25 unsigned int ignore_dlopen_errors:1; |
13569
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
26 /* Don't fail if some specified modules weren't found */ |
976e414d5bf4
module_dir_load*(): Support filtering and ignoring missing modules.
Timo Sirainen <tss@iki.fi>
parents:
11906
diff
changeset
|
27 unsigned int ignore_missing:1; |
10422
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
28 }; |
55c42d2f7002
module_dir_load*() API changed to take settings struct, with debug field.
Timo Sirainen <tss@iki.fi>
parents:
10416
diff
changeset
|
29 |
1466 | 30 struct module { |
2084
9ba79ebae6ab
Added support for password scheme plugins. auth module dir defaults under
Timo Sirainen <tss@iki.fi>
parents:
1466
diff
changeset
|
31 char *path, *name; |
9ba79ebae6ab
Added support for password scheme plugins. auth module dir defaults under
Timo Sirainen <tss@iki.fi>
parents:
1466
diff
changeset
|
32 |
1466 | 33 void *handle; |
10412
a9eda7672869
lib-storage: Plugin hook API changed to support per-user plugins within a process.
Timo Sirainen <tss@iki.fi>
parents:
10335
diff
changeset
|
34 void (*init)(struct module *module); |
1466 | 35 void (*deinit)(void); |
36 | |
10416
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
37 unsigned int initialized:1; |
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
38 |
1466 | 39 struct module *next; |
40 }; | |
41 | |
4074
dadc6e2cccb8
Replaced mail_use_modules and mail_modules settings with mail_plugins and
Timo Sirainen <tss@iki.fi>
parents:
3988
diff
changeset
|
42 /* Load modules in given directory. module_names is a space separated list of |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13569
diff
changeset
|
43 module names to load. */ |
4074
dadc6e2cccb8
Replaced mail_use_modules and mail_modules settings with mail_plugins and
Timo Sirainen <tss@iki.fi>
parents:
3988
diff
changeset
|
44 struct module *module_dir_load(const char *dir, const char *module_names, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13569
diff
changeset
|
45 const struct module_dir_load_settings *set) |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13569
diff
changeset
|
46 ATTR_NULL(2); |
10416
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
47 /* Load modules that aren't already loaded. */ |
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
48 struct module * |
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
49 module_dir_load_missing(struct module *old_modules, |
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
50 const char *dir, const char *module_names, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13569
diff
changeset
|
51 const struct module_dir_load_settings *set) |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13569
diff
changeset
|
52 ATTR_NULL(1, 3); |
18225
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
53 /* Load modules that aren't already loaded. */ |
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
54 int module_dir_try_load_missing(struct module **modules, |
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
55 const char *dir, const char *module_names, |
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
56 const struct module_dir_load_settings *set, |
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
57 const char **error_r) |
88b09d5912c0
lib: Added module_dir_try_load_missing() that returns error instead of logging it.
Timo Sirainen <tss@iki.fi>
parents:
15415
diff
changeset
|
58 ATTR_NULL(1, 3); |
5148
7f2c39d7a2cc
module_dir_load() doesn't call init() functions anymore. Added a new
Timo Sirainen <tss@iki.fi>
parents:
4167
diff
changeset
|
59 /* Call init() in all modules */ |
7f2c39d7a2cc
module_dir_load() doesn't call init() functions anymore. Added a new
Timo Sirainen <tss@iki.fi>
parents:
4167
diff
changeset
|
60 void module_dir_init(struct module *modules); |
3988 | 61 /* Call deinit() in all modules and mark them NULL so module_dir_unload() |
62 won't do it again. */ | |
63 void module_dir_deinit(struct module *modules); | |
1466 | 64 /* Unload all modules */ |
3879
928229f8b3e6
deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents:
3863
diff
changeset
|
65 void module_dir_unload(struct module **modules); |
15415
8f0994194f45
liblib: Added module_dir_find()
Timo Sirainen <tss@iki.fi>
parents:
15199
diff
changeset
|
66 /* Find a module by name. */ |
8f0994194f45
liblib: Added module_dir_find()
Timo Sirainen <tss@iki.fi>
parents:
15199
diff
changeset
|
67 struct module *module_dir_find(struct module *modules, const char *name); |
1466 | 68 |
2084
9ba79ebae6ab
Added support for password scheme plugins. auth module dir defaults under
Timo Sirainen <tss@iki.fi>
parents:
1466
diff
changeset
|
69 void *module_get_symbol(struct module *module, const char *symbol); |
10335
12434655f2e5
Added module_get_symbol_quiet().
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
70 void *module_get_symbol_quiet(struct module *module, const char *symbol); |
2084
9ba79ebae6ab
Added support for password scheme plugins. auth module dir defaults under
Timo Sirainen <tss@iki.fi>
parents:
1466
diff
changeset
|
71 |
4167
32dd28f96dce
Allow giving module names in non-basename form.
Timo Sirainen <tss@iki.fi>
parents:
4074
diff
changeset
|
72 /* Returns module's base name from the filename. */ |
32dd28f96dce
Allow giving module names in non-basename form.
Timo Sirainen <tss@iki.fi>
parents:
4074
diff
changeset
|
73 const char *module_file_get_name(const char *fname); |
10416
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
74 /* Returns module's name without "_plugin" suffix. */ |
f0a6461b86ee
Added module_dir_load_missing() and module_get_plugin_name().
Timo Sirainen <tss@iki.fi>
parents:
10412
diff
changeset
|
75 const char *module_get_plugin_name(struct module *module); |
4167
32dd28f96dce
Allow giving module names in non-basename form.
Timo Sirainen <tss@iki.fi>
parents:
4074
diff
changeset
|
76 |
1466 | 77 #endif |