aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-12-05 13:23:54 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-12-05 13:23:54 +0000
commit022977e0b7c160e6e33ec07f2c41f60707d43cb6 (patch)
treed2474ca5b8d68e3f9c677a7ede0aecb8f7ac6ee9 /src/lua
parent9192f3cf4ca5d2fbc8701bcfe91edcfa1ee3192c (diff)
downloadrspamd-022977e0b7c160e6e33ec07f2c41f60707d43cb6.tar.gz
rspamd-022977e0b7c160e6e33ec07f2c41f60707d43cb6.zip
[Rework] Adopt code for the new options
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/lua_config.c17
-rw-r--r--src/lua/lua_task.c41
2 files changed, 27 insertions, 31 deletions
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c
index 7c2b84609..48bb36e6d 100644
--- a/src/lua/lua_config.c
+++ b/src/lua/lua_config.c
@@ -808,6 +808,7 @@ lua_metric_symbol_callback (struct rspamd_task *task, gpointer ud)
gint level = lua_gettop (cd->L), nresults, err_idx;
lua_State *L = cd->L;
GString *tb;
+ struct symbol *s;
lua_pushcfunction (L, &rspamd_lua_traceback);
err_idx = lua_gettop (L);
@@ -837,7 +838,6 @@ lua_metric_symbol_callback (struct rspamd_task *task, gpointer ud)
if (nresults >= 1) {
/* Function returned boolean, so maybe we need to insert result? */
gint res = 0;
- GList *opts = NULL;
gint i;
gdouble flag = 1.0;
@@ -860,17 +860,18 @@ lua_metric_symbol_callback (struct rspamd_task *task, gpointer ud)
flag = res;
}
- for (i = lua_gettop (L); i >= level + first_opt; i--) {
- if (lua_type (L, i) == LUA_TSTRING) {
- const char *opt = lua_tostring (L, i);
+ s = rspamd_task_insert_result (task, cd->symbol, flag, NULL);
- opts = g_list_prepend (opts,
- rspamd_mempool_strdup (task->task_pool,
- opt));
+ if (s) {
+ for (i = lua_gettop (L); i >= level + first_opt; i--) {
+ if (lua_type (L, i) == LUA_TSTRING) {
+ const char *opt = lua_tostring (L, i);
+
+ rspamd_task_add_result_option (task, s, opt);
+ }
}
}
- rspamd_task_insert_result (task, cd->symbol, flag, opts);
}
lua_pop (L, nresults);
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c
index 8f28bb97b..7693fe48e 100644
--- a/src/lua/lua_task.c
+++ b/src/lua/lua_task.c
@@ -1018,7 +1018,7 @@ lua_task_insert_result (lua_State * L)
struct rspamd_task *task = lua_check_task (L, 1);
const gchar *symbol_name, *param;
double flag;
- GList *params = NULL;
+ struct symbol *s;
gint i, top;
if (task != NULL) {
@@ -1026,35 +1026,30 @@ lua_task_insert_result (lua_State * L)
rspamd_mempool_strdup (task->task_pool, luaL_checkstring (L, 2));
flag = luaL_checknumber (L, 3);
top = lua_gettop (L);
+ s = rspamd_task_insert_result (task, symbol_name, flag, NULL);
+
/* Get additional options */
- for (i = 4; i <= top; i++) {
- if (lua_type (L, i) == LUA_TSTRING) {
- param = luaL_checkstring (L, i);
- params =
- g_list_prepend (params,
- rspamd_mempool_strdup (task->task_pool, param));
- }
- else if (lua_type (L, i) == LUA_TTABLE) {
- lua_pushvalue (L, i);
- lua_pushnil (L);
+ if (s) {
+ for (i = 4; i <= top; i++) {
+ if (lua_type (L, i) == LUA_TSTRING) {
+ param = luaL_checkstring (L, i);
+ rspamd_task_add_result_option (task, s, param);
+ }
+ else if (lua_type (L, i) == LUA_TTABLE) {
+ lua_pushvalue (L, i);
+ lua_pushnil (L);
+
+ while (lua_next (L, -2)) {
+ param = lua_tostring (L, -1);
+ rspamd_task_add_result_option (task, s, param);
+ lua_pop (L, 1);
+ }
- while (lua_next (L, -2)) {
- param = lua_tostring (L, -1);
- params = g_list_prepend (params,
- rspamd_mempool_strdup (task->task_pool,
- param));
lua_pop (L, 1);
}
-
- lua_pop (L, 1);
}
}
- if (params) {
- params = g_list_reverse (params);
- }
-
- rspamd_task_insert_result (task, symbol_name, flag, params);
}
else {
return luaL_error (L, "invalid arguments");