Disable strict XML documentation config checking; fix crash caused by sorcery

This patch does two things:
 1. It disables (temporarily) strict XML documentation checking for module
    configurations. We should re-enable it before making any release from
    trunk.
 2. Pass the module flag AST_MODULE through sorcery. This means several of the
    API calls are now macros and will do this automatically for you. The config
    framework needs the module that objects are registering to so it can
    properly construct the documentation. (This was already a required field,
    but sorcery was getting by without it)




git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@381567 65c4cc65-6c06-0410-ace0-fbb531ad65f3
changes/78/78/1
Matthew Jordan 12 years ago
parent 71bce17720
commit e123ee2d77

@ -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

@ -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

@ -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)

Loading…
Cancel
Save