mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-19 08:11:21 +00:00
Merge "config: Allow options to register when documentation is unavailable." into 13
This commit is contained in:
@@ -71,6 +71,9 @@ struct aco_option {
|
||||
aco_option_handler handler;
|
||||
unsigned int flags;
|
||||
unsigned int no_doc:1;
|
||||
#ifdef AST_DEVMODE
|
||||
unsigned int doc_unavailable:1;
|
||||
#endif
|
||||
unsigned char deprecated:1;
|
||||
size_t argc;
|
||||
intptr_t args[0];
|
||||
@@ -183,18 +186,20 @@ static int link_option_to_types(struct aco_info *info, struct aco_type **types,
|
||||
ast_log(LOG_ERROR, "Attempting to register option using uninitialized type\n");
|
||||
return -1;
|
||||
}
|
||||
if (!ao2_link(type->internal->opts, opt)
|
||||
#ifdef AST_XML_DOCS
|
||||
|| (!info->hidden &&
|
||||
!opt->no_doc &&
|
||||
xmldoc_update_config_option(types, info->module, opt->name, type->name, opt->default_val, opt->match_type == ACO_REGEX, opt->type))
|
||||
#endif /* AST_XML_DOCS */
|
||||
) {
|
||||
if (!ao2_link(type->internal->opts, opt)) {
|
||||
do {
|
||||
ao2_unlink(types[idx - 1]->internal->opts, opt);
|
||||
} while (--idx);
|
||||
return -1;
|
||||
}
|
||||
#ifdef AST_XML_DOCS
|
||||
if (!info->hidden && !opt->no_doc &&
|
||||
xmldoc_update_config_option(types, info->module, opt->name, type->name, opt->default_val, opt->match_type == ACO_REGEX, opt->type)) {
|
||||
#ifdef AST_DEVMODE
|
||||
opt->doc_unavailable = 1;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
/* The container(s) should hold the only ref to opt */
|
||||
ao2_ref(opt, -1);
|
||||
@@ -716,6 +721,14 @@ int aco_process_var(struct aco_type *type, const char *cat, struct ast_variable
|
||||
ast_log(LOG_ERROR, "BUG! Somehow a config option for %s/%s was created with no handler!\n", cat, var->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef AST_DEVMODE
|
||||
if (opt->doc_unavailable) {
|
||||
ast_log(LOG_ERROR, "Config option '%s' of type '%s' is not completely documented and can not be set\n", var->name, type->name);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (opt->handler(opt, var, obj)) {
|
||||
ast_log(LOG_ERROR, "Error parsing %s=%s at line %d of %s\n", var->name, var->value, var->lineno, var->file);
|
||||
return -1;
|
||||
|
||||
Reference in New Issue
Block a user