struct config_module_parser *config_module_parsers;
struct config_filter_context *config_filter;
+struct module *modules;
static const char *info_type_name_find(const struct setting_parser_info *info)
{
void config_parse_load_modules(void)
{
struct module_dir_load_settings mod_set;
- struct module *modules, *m;
+ struct module *m;
const struct setting_parser_info **roots;
ARRAY_DEFINE(new_roots, const struct setting_parser_info *);
ARRAY_TYPE(service_settings) new_services;
extern struct config_module_parser *config_module_parsers;
extern struct config_filter_context *config_filter;
+extern struct module *modules;
int config_parse_file(const char *path, bool expand_values, const char *module,
const char **error_r);
#include "lib.h"
#include "array.h"
#include "abspath.h"
+#include "module-dir.h"
#include "env-util.h"
#include "ostream.h"
#include "str.h"
i_fatal("Errors in configuration");
config_filter_deinit(&config_filter);
+ module_dir_unload(&modules);
master_service_deinit(&master_service);
return 0;
}
/* Copyright (c) 2005-2010 Dovecot authors, see the included COPYING file */
#include "lib.h"
-#include "array.h"
-#include "env-util.h"
+#include "module-dir.h"
#include "restrict-access.h"
#include "master-service.h"
#include "config-connection.h"
config_connections_destroy_all();
config_filter_deinit(&config_filter);
+ module_dir_unload(&modules);
master_service_deinit(&master_service);
return 0;
}