summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2013-02-15 18:44:24 +0000
committerMatthew Jordan <mjordan@digium.com>2013-02-15 18:44:24 +0000
commite123ee2d77280e784d237dfc55740e96493819b7 (patch)
treedb775cdd19ea48c980705d5c79a91cdc03e2d738
parent71bce17720d92ec286a2e85cdbc74545c7a4339f (diff)
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
-rw-r--r--include/asterisk/sorcery.h12
-rw-r--r--main/config_options.c2
-rw-r--r--main/sorcery.c15
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)