瀏覽代碼

Allow single string to be in a string list.

tags/0.9.0
Vsevolod Stakhov 9 年之前
父節點
當前提交
bed11b5798
共有 1 個文件被更改,包括 40 次插入32 次删除
  1. 40
    32
      src/libserver/cfg_rcl.c

+ 40
- 32
src/libserver/cfg_rcl.c 查看文件

@@ -1864,41 +1864,49 @@ rspamd_rcl_parse_struct_string_list (struct rspamd_config *cfg,

target = (GList **)(((gchar *)pd->user_struct) + pd->offset);

if (obj->type != UCL_ARRAY) {
g_set_error (err,
CFG_RCL_ERROR,
EINVAL,
"an array of strings is expected");
return FALSE;
if (obj->type == UCL_STRING) {
/* Just a single string */
val = rspamd_mempool_strdup (cfg->cfg_pool,
ucl_copy_value_trash (obj));
*target = g_list_prepend (*target, val);
}

while ((cur = ucl_iterate_object (obj, &iter, true)) != NULL) {
switch (cur->type) {
case UCL_STRING:
val =
rspamd_mempool_strdup (cfg->cfg_pool,
ucl_copy_value_trash (cur));
break;
case UCL_INT:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%L", cur->value.iv);
break;
case UCL_FLOAT:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%f", cur->value.dv);
break;
case UCL_BOOLEAN:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%b", (gboolean)cur->value.iv);
break;
default:
g_set_error (err,
else if (obj->type == UCL_ARRAY) {

while ((cur = ucl_iterate_object (obj, &iter, true)) != NULL) {
switch (cur->type) {
case UCL_STRING:
val =
rspamd_mempool_strdup (cfg->cfg_pool,
ucl_copy_value_trash (cur));
break;
case UCL_INT:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%L", cur->value.iv);
break;
case UCL_FLOAT:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%f", cur->value.dv);
break;
case UCL_BOOLEAN:
val = rspamd_mempool_alloc (cfg->cfg_pool, num_str_len);
rspamd_snprintf (val, num_str_len, "%b", (gboolean)cur->value.iv);
break;
default:
g_set_error (err,
CFG_RCL_ERROR,
EINVAL,
"cannot convert an object or array to string");
return FALSE;
}
*target = g_list_prepend (*target, val);
}
}
else {
g_set_error (err,
CFG_RCL_ERROR,
EINVAL,
"cannot convert an object or array to string");
return FALSE;
}
*target = g_list_prepend (*target, val);
"an array of strings is expected");
return FALSE;
}

/* Add a destructor */

Loading…
取消
儲存