aboutsummaryrefslogtreecommitdiffstats
path: root/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'loader.c')
-rwxr-xr-xloader.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/loader.c b/loader.c
index 012491cc1..ec8585190 100755
--- a/loader.c
+++ b/loader.c
@@ -450,35 +450,53 @@ static const char *loadorder[] =
NULL,
};
-int load_modules()
+int load_modules(const int preload_only)
{
struct ast_config *cfg;
struct ast_variable *v;
char tmp[80];
- if (option_verbose)
- ast_verbose( "Asterisk Dynamic Loader Starting:\n");
+
+ if (option_verbose) {
+ if (preload_only)
+ ast_verbose("Asterisk Dynamic Loader loading preload modules:\n");
+ else
+ ast_verbose("Asterisk Dynamic Loader Starting:\n");
+ }
+
cfg = ast_config_load(AST_MODULE_CONFIG);
if (cfg) {
+ int doload;
+
/* Load explicitly defined modules */
- v = ast_variable_browse(cfg, "modules");
- while(v) {
- if (!strcasecmp(v->name, "load")) {
+ for (v = ast_variable_browse(cfg, "modules"); v; v = v->next) {
+ doload = 0;
+
+ if (preload_only)
+ doload = !strcasecmp(v->name, "preload");
+ else
+ doload = !strcasecmp(v->name, "load");
+
+ if (doload) {
if (option_debug && !option_verbose)
ast_log(LOG_DEBUG, "Loading module %s\n", v->value);
if (option_verbose) {
- ast_verbose( VERBOSE_PREFIX_1 "[%s]", term_color(tmp, v->value, COLOR_BRWHITE, 0, sizeof(tmp)));
+ ast_verbose(VERBOSE_PREFIX_1 "[%s]", term_color(tmp, v->value, COLOR_BRWHITE, 0, sizeof(tmp)));
fflush(stdout);
}
if (__load_resource(v->value, cfg)) {
ast_log(LOG_WARNING, "Loading module %s failed!\n", v->value);
- if (cfg)
- ast_config_destroy(cfg);
+ ast_config_destroy(cfg);
return -1;
}
}
- v=v->next;
}
}
+
+ if (preload_only) {
+ ast_config_destroy(cfg);
+ return 0;
+ }
+
if (!cfg || ast_true(ast_variable_retrieve(cfg, "modules", "autoload"))) {
/* Load all modules */
DIR *mods;