Browse Source

Add method to insert documentation to the specific path

tags/1.1.0
Vsevolod Stakhov 8 years ago
parent
commit
76dad93fd2
2 changed files with 59 additions and 0 deletions
  1. 47
    0
      src/libserver/cfg_rcl.c
  2. 12
    0
      src/libserver/cfg_rcl.h

+ 47
- 0
src/libserver/cfg_rcl.c View File

@@ -3063,3 +3063,50 @@ rspamd_rcl_add_doc_obj (ucl_object_t *doc_target,

return doc_obj;
}

ucl_object_t *
rspamd_rcl_add_doc_by_path (struct rspamd_config *cfg,
const gchar *doc_path,
const char *doc_string,
const char *doc_name,
ucl_type_t type,
rspamd_rcl_default_handler_t handler,
gint flags)
{
const ucl_object_t *found, *cur;
ucl_object_t *obj;
gchar **path_components, **comp;

found = ucl_lookup_path (cfg->doc_strings, doc_path);

if (found != NULL) {
return rspamd_rcl_add_doc_obj ((ucl_object_t *)found,
doc_string, doc_name, type, handler, flags);
}

/* Otherwise we need to insert all components of the path */
path_components = g_strsplit_set (doc_path, ".", -1);
cur = cfg->doc_strings;

for (comp = path_components; *comp != NULL; comp ++) {
if (ucl_object_type (cur) != UCL_OBJECT) {
msg_err_config ("Bad path while lookup for '%s' at %s",
doc_path, *comp);
return NULL;
}

found = ucl_object_find_key (cur, *comp);

if (found == NULL) {
obj = ucl_object_typed_new (UCL_OBJECT);
ucl_object_insert_key ((ucl_object_t *)cur, obj, *comp, 0, true);
cur = obj;
}
else {
cur = found;
}
}

return rspamd_rcl_add_doc_obj ((ucl_object_t *) cur,
doc_string, doc_name, type, handler, flags);
}

+ 12
- 0
src/libserver/cfg_rcl.h View File

@@ -358,4 +358,16 @@ ucl_object_t* rspamd_rcl_add_doc_obj (ucl_object_t *doc_target,
ucl_type_t type,
rspamd_rcl_default_handler_t handler,
gint flags);

/**
* Adds new documentation option specified by path `doc_path` that should be
* splitted by dots
*/
ucl_object_t *rspamd_rcl_add_doc_by_path (struct rspamd_config *cfg,
const gchar *doc_path,
const char *doc_string,
const char *doc_name,
ucl_type_t type,
rspamd_rcl_default_handler_t handler,
gint flags);
#endif /* CFG_RCL_H_ */

Loading…
Cancel
Save