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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 void (*deinit)(void);
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 struct module *next;
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 };
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
ab1a0a377851 Added module_dir_deinit().
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
61 /* Call deinit() in all modules and mark them NULL so module_dir_unload()
ab1a0a377851 Added module_dir_deinit().
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
62 won't do it again. */
ab1a0a377851 Added module_dir_deinit().
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
63 void module_dir_deinit(struct module *modules);
1466
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
5ecbc9f82019 missing
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 #endif