diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-12-05 13:23:54 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-12-05 13:23:54 +0000 |
commit | 022977e0b7c160e6e33ec07f2c41f60707d43cb6 (patch) | |
tree | d2474ca5b8d68e3f9c677a7ede0aecb8f7ac6ee9 /src/lua | |
parent | 9192f3cf4ca5d2fbc8701bcfe91edcfa1ee3192c (diff) | |
download | rspamd-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.c | 17 | ||||
-rw-r--r-- | src/lua/lua_task.c | 41 |
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"); |