rspamd_scan_result_dtor (gpointer d)
{
struct rspamd_scan_result *r = (struct rspamd_scan_result *)d;
- struct rspamd_symbol_result sres;
+ struct rspamd_symbol_result *sres;
rspamd_set_counter_ema (&symbols_count, kh_size (r->symbols), 0.5);
}
kh_foreach_value (r->symbols, sres, {
- if (sres.options) {
- kh_destroy (rspamd_options_hash, sres.options);
+ if (sres->options) {
+ kh_destroy (rspamd_options_hash, sres->options);
}
});
kh_destroy (rspamd_symbols_hash, r->symbols);
k = kh_get (rspamd_symbols_hash, metric_res->symbols, symbol);
if (k != kh_end (metric_res->symbols)) {
/* Existing metric score */
- s = &kh_value (metric_res->symbols, k);
+ s = kh_value (metric_res->symbols, k);
if (single) {
max_shots = 1;
}
k = kh_put (rspamd_symbols_hash, metric_res->symbols,
sym_cpy, &ret);
g_assert (ret > 0);
- s = &kh_value (metric_res->symbols, k);
- memset (s, 0, sizeof (*s));
+ s = rspamd_mempool_alloc0 (task->task_pool, sizeof (*s));
+ kh_value (metric_res->symbols, k) = s;
/* Handle grow factor */
if (metric_res->grow_factor && final_score > 0) {
k = kh_get (rspamd_symbols_hash, result->symbols, sym);
if (k != kh_end (result->symbols)) {
- res = &kh_value (result->symbols, k);
+ res = kh_value (result->symbols, k);
}
return res;
k = kh_get (rspamd_symbols_hash, result->symbols, symbol);
if (k != kh_end (result->symbols)) {
- res = &kh_value (result->symbols, k);
+ res = kh_value (result->symbols, k);
if (!isnan (res->score)) {
/* Remove score from the result */
gpointer ud)
{
const gchar *kk;
- struct rspamd_symbol_result res;
+ struct rspamd_symbol_result *res;
if (result == NULL) {
/* Use default result */
if (func) {
kh_foreach (result->symbols, kk, res, {
- func ((gpointer)kk, (gpointer)&res, ud);
+ func ((gpointer)kk, (gpointer)res, ud);
});
}
}
/**
* Result of metric processing
*/
-KHASH_MAP_INIT_STR (rspamd_symbols_hash, struct rspamd_symbol_result);
+KHASH_MAP_INIT_STR (rspamd_symbols_hash, struct rspamd_symbol_result *);
#if UINTPTR_MAX <= UINT_MAX
/* 32 bit */
#define rspamd_ptr_hash_func(key) (khint32_t)(((uintptr_t)(key))>>1)
obj = ucl_object_typed_new (UCL_OBJECT);
}
- kh_foreach_value_ptr (mres->symbols, sym, {
+ kh_foreach_value (mres->symbols, sym, {
if (!(sym->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) {
sobj = rspamd_metric_symbol_ucl (task, sym);
ucl_object_insert_key (obj, sobj, sym->name, 0, false);
i = 0;
- kh_foreach_value_ptr (mres->symbols, sym, {
+ kh_foreach_value (mres->symbols, sym, {
id = rspamd_symcache_find_symbol (task->cfg->cache,
sym->name);
symbuf = rspamd_fstring_sized_new (128);
sorted_symbols = g_ptr_array_sized_new (kh_size (mres->symbols));
- kh_foreach_value_ptr (mres->symbols, sym, {
+ kh_foreach_value (mres->symbols, sym, {
if (!(sym->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) {
g_ptr_array_add (sorted_symbols, (gpointer)sym);
}
lua_createtable (L, kh_size (mres->symbols), 0);
lua_createtable (L, kh_size (mres->symbols), 0);
- kh_foreach_value_ptr (mres->symbols, s, {
+ kh_foreach_value (mres->symbols, s, {
if (!(s->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) {
lua_pushstring (L, s->name);
lua_rawseti (L, -3, i);
found = TRUE;
lua_createtable (L, kh_size (mres->symbols), 0);
- kh_foreach_value_ptr (mres->symbols, s, {
+ kh_foreach_value (mres->symbols, s, {
if (!(s->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) {
lua_push_symbol_result (L, task, s->name, s, mres, FALSE, TRUE);
lua_rawseti (L, -2, i++);
lua_createtable (L, kh_size (mres->symbols), 0);
- kh_foreach_value_ptr (mres->symbols, s, {
+ kh_foreach_value (mres->symbols, s, {
if (!(s->flags & RSPAMD_SYMBOL_RESULT_IGNORED)) {
id = rspamd_symcache_find_symbol (task->cfg->cache,
s->name);