aboutsummaryrefslogtreecommitdiffstats
path: root/src/cfg_rcl.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2013-11-02 22:12:39 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2013-11-02 22:12:39 +0000
commitbbf9405abd6caff16f7680e2d8918c71579e2161 (patch)
tree2c834e6e1b35231d809d5d0edfc0f5af4410fecf /src/cfg_rcl.c
parentebaf611123e405af3fcf1f59aa542198bc5c95b3 (diff)
downloadrspamd-bbf9405abd6caff16f7680e2d8918c71579e2161.tar.gz
rspamd-bbf9405abd6caff16f7680e2d8918c71579e2161.zip
Sync with libucl.
Diffstat (limited to 'src/cfg_rcl.c')
-rw-r--r--src/cfg_rcl.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/cfg_rcl.c b/src/cfg_rcl.c
index 2190f648a..0a251e7e1 100644
--- a/src/cfg_rcl.c
+++ b/src/cfg_rcl.c
@@ -300,13 +300,14 @@ static gboolean
rspamd_rcl_metric_handler (struct config_file *cfg, ucl_object_t *obj,
gpointer ud, struct rspamd_rcl_section *section, GError **err)
{
- ucl_object_t *val, *cur, *tmp;
+ ucl_object_t *val, *cur;
const gchar *metric_name, *subject_name, *semicolon, *act_str;
struct metric *metric;
struct metric_action *action;
gdouble action_score, grow_factor;
gint action_value;
gboolean new = TRUE, have_actions = FALSE;
+ ucl_object_iter_t it = NULL;
val = ucl_object_find_key (obj, "name");
if (val == NULL || !ucl_object_tostring_safe (val, &metric_name)) {
@@ -329,7 +330,7 @@ rspamd_rcl_metric_handler (struct config_file *cfg, ucl_object_t *obj,
g_set_error (err, CFG_RCL_ERROR, EINVAL, "actions must be an object");
return FALSE;
}
- HASH_ITER (hh, val, cur, tmp) {
+ while ((cur = ucl_iterate_object (val, &it, true)) != NULL) {
if (!check_action_str (ucl_object_key (cur), &action_value) ||
!ucl_object_todouble_safe (cur, &action_score)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "invalid action definition: %s", ucl_object_key (cur));
@@ -381,7 +382,8 @@ rspamd_rcl_metric_handler (struct config_file *cfg, ucl_object_t *obj,
g_set_error (err, CFG_RCL_ERROR, EINVAL, "symbols must be an object");
return FALSE;
}
- HASH_ITER (hh, val->value.ov, cur, tmp) {
+ it = NULL;
+ while ((cur = ucl_iterate_object (val, &it, true)) != NULL) {
if (!rspamd_rcl_insert_symbol (cfg, metric, cur, FALSE, err)) {
return FALSE;
}
@@ -431,7 +433,8 @@ static gboolean
rspamd_rcl_worker_handler (struct config_file *cfg, ucl_object_t *obj,
gpointer ud, struct rspamd_rcl_section *section, GError **err)
{
- ucl_object_t *val, *cur, *tmp;
+ ucl_object_t *val, *cur;
+ ucl_object_iter_t it = NULL;
const gchar *worker_type, *worker_bind;
GQuark qtype;
struct worker_conf *wrk;
@@ -492,7 +495,7 @@ rspamd_rcl_worker_handler (struct config_file *cfg, ucl_object_t *obj,
/* Parse other attributes */
HASH_FIND_INT (cfg->wrk_parsers, (gint *)&qtype, wparser);
if (wparser != NULL && obj->type == UCL_OBJECT) {
- HASH_ITER (hh, obj->value.ov, cur, tmp) {
+ while ((cur = ucl_iterate_object (obj, &it, true)) != NULL) {
HASH_FIND_STR (wparser->parsers, ucl_object_key (cur), whandler);
if (whandler != NULL) {
if (!whandler->handler (cfg, cur, &whandler->parser, section, err)) {