diff options
-rw-r--r-- | include/asterisk/sorcery.h | 12 | ||||
-rw-r--r-- | main/config_options.c | 2 | ||||
-rw-r--r-- | main/sorcery.c | 15 |
3 files changed, 19 insertions, 10 deletions
diff --git a/include/asterisk/sorcery.h b/include/asterisk/sorcery.h index 6f3ec3a52..e5f727a7b 100644 --- a/include/asterisk/sorcery.h +++ b/include/asterisk/sorcery.h @@ -275,17 +275,22 @@ struct ast_sorcery *ast_sorcery_open(void); * * \param sorcery Pointer to a sorcery structure * \param name Name of the category to use within the configuration file, normally the module name + * \param module The module name (AST_MODULE) * * \retval 0 success * \retval -1 failure */ -int ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name); +int __ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name, const char *module); + +#define ast_sorcery_apply_config(sorcery, name) \ + __ast_sorcery_apply_config((sorcery), (name), AST_MODULE) /*! * \brief Apply default object wizard mappings * * \param sorcery Pointer to a sorcery structure * \param type Type of object to apply to + * \param module The name of the module, typically AST_MODULE * \param name Name of the wizard to use * \param data Data to be passed to wizard * @@ -296,7 +301,10 @@ int ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name); * * \note Only a single default can exist per object type */ -int ast_sorcery_apply_default(struct ast_sorcery *sorcery, const char *type, const char *name, const char *data); +int __ast_sorcery_apply_default(struct ast_sorcery *sorcery, const char *type, const char *module, const char *name, const char *data); + +#define ast_sorcery_apply_default(sorcery, type, name, data) \ + __ast_sorcery_apply_default((sorcery), (type), AST_MODULE, (name), (data)) /*! * \brief Register an object type diff --git a/main/config_options.c b/main/config_options.c index 7a65cc555..06b452131 100644 --- a/main/config_options.c +++ b/main/config_options.c @@ -894,7 +894,7 @@ static char *complete_config_option(const char *module, const char *option, cons /* Define as 0 if we want to allow configurations to be registered without * documentation */ -#define XMLDOC_STRICT 1 +#define XMLDOC_STRICT 0 /*! \internal * \brief Update the XML documentation for a config type based on its registration diff --git a/main/sorcery.c b/main/sorcery.c index f9ff6d563..6a0fb4acc 100644 --- a/main/sorcery.c +++ b/main/sorcery.c @@ -330,7 +330,7 @@ static void sorcery_object_type_destructor(void *obj) } /*! \brief Internal function which allocates an object type structure */ -static struct ast_sorcery_object_type *sorcery_object_type_alloc(const char *type) +static struct ast_sorcery_object_type *sorcery_object_type_alloc(const char *type, const char *module) { struct ast_sorcery_object_type *object_type; @@ -361,6 +361,7 @@ static struct ast_sorcery_object_type *sorcery_object_type_alloc(const char *typ object_type->info->files[0] = object_type->file; object_type->info->files[1] = NULL; + object_type->info->module = module; ast_copy_string(object_type->name, type, sizeof(object_type->name)); @@ -382,7 +383,7 @@ static void sorcery_object_wizard_destructor(void *obj) } /*! \brief Internal function which creates an object type and adds a wizard mapping */ -static int sorcery_apply_wizard_mapping(struct ast_sorcery *sorcery, const char *type, const char *name, const char *data, unsigned int caching) +static int sorcery_apply_wizard_mapping(struct ast_sorcery *sorcery, const char *type, const char *module, const char *name, const char *data, unsigned int caching) { RAII_VAR(struct ast_sorcery_object_type *, object_type, ao2_find(sorcery->types, type, OBJ_KEY), ao2_cleanup); RAII_VAR(struct ast_sorcery_wizard *, wizard, ao2_find(wizards, name, OBJ_KEY), ao2_cleanup); @@ -394,7 +395,7 @@ static int sorcery_apply_wizard_mapping(struct ast_sorcery *sorcery, const char } if (!object_type) { - if (!(object_type = sorcery_object_type_alloc(type))) { + if (!(object_type = sorcery_object_type_alloc(type, module))) { return -1; } created = 1; @@ -418,7 +419,7 @@ static int sorcery_apply_wizard_mapping(struct ast_sorcery *sorcery, const char return 0; } -int ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name) +int __ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name, const char *module) { struct ast_flags flags = { 0 }; struct ast_config *config = ast_config_load2("sorcery.conf", "sorcery", flags); @@ -447,7 +448,7 @@ int ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name) } /* Any error immediately causes us to stop */ - if ((res = sorcery_apply_wizard_mapping(sorcery, name, wizard, data, caching))) { + if ((res = sorcery_apply_wizard_mapping(sorcery, name, module, wizard, data, caching))) { break; } } @@ -457,7 +458,7 @@ int ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name) return res; } -int ast_sorcery_apply_default(struct ast_sorcery *sorcery, const char *type, const char *name, const char *data) +int __ast_sorcery_apply_default(struct ast_sorcery *sorcery, const char *type, const char *module, const char *name, const char *data) { RAII_VAR(struct ast_sorcery_object_type *, object_type, ao2_find(sorcery->types, type, OBJ_KEY), ao2_cleanup); @@ -466,7 +467,7 @@ int ast_sorcery_apply_default(struct ast_sorcery *sorcery, const char *type, con return -1; } - return sorcery_apply_wizard_mapping(sorcery, type, name, data, 0); + return sorcery_apply_wizard_mapping(sorcery, type, module, name, data, 0); } int ast_sorcery_object_register(struct ast_sorcery *sorcery, const char *type, aco_type_item_alloc alloc, sorcery_transform_handler transform, sorcery_apply_handler apply) |