diff options
Diffstat (limited to 'loader.c')
-rwxr-xr-x | loader.c | 38 |
1 files changed, 28 insertions, 10 deletions
@@ -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; |