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];
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);
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;