diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-01-02 17:37:28 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-01-02 17:37:28 +0000 |
commit | 76dad93fd2f437167af999787168e1c3aae398ef (patch) | |
tree | b5b45acdfca85eaeb86350ddf705614f5bc6fcc3 /src/libserver/cfg_rcl.c | |
parent | f66d2ffef3a6ef62c5b39b9dd86ab15aa44d3c3f (diff) | |
download | rspamd-76dad93fd2f437167af999787168e1c3aae398ef.tar.gz rspamd-76dad93fd2f437167af999787168e1c3aae398ef.zip |
Add method to insert documentation to the specific path
Diffstat (limited to 'src/libserver/cfg_rcl.c')
-rw-r--r-- | src/libserver/cfg_rcl.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c index 44e84acea..a493e9c32 100644 --- a/src/libserver/cfg_rcl.c +++ b/src/libserver/cfg_rcl.c @@ -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); +} |