From 1f1c4f161b428c36695c9f8a038c2ff07145de8e Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 28 Apr 2025 16:53:53 -0700 Subject: [PATCH] cfg query eval filtering --- src/raddbg/raddbg_core.c | 5 ++++- src/raddbg/raddbg_eval.c | 17 ++++++++++++++++- src/raddbg/raddbg_views.c | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index fbaededa..cfafe420 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -15209,7 +15209,10 @@ rd_frame(void) case RD_CmdKind_AddColor: { RD_Cfg *parent = rd_cfg_from_id(rd_regs()->cfg); - rd_cfg_new(parent, str8_lit("color")); + RD_Cfg *color = rd_cfg_new(parent, str8_lit("color")); + rd_cfg_new(color, str8_lit("tags")); + RD_Cfg *value = rd_cfg_new(color, str8_lit("value")); + rd_cfg_new(value, str8_lit("0xffffffff")); }break; case RD_CmdKind_ImportColors: { diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index 848d6880..fe7de6e7 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -740,9 +740,24 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query) } } RD_CfgList children = rd_cfg_child_list_from_string(scratch.arena, root_cfg, child_key); + RD_CfgList children__filtered = children; + if(filter.size != 0) + { + MemoryZeroStruct(&children__filtered); + for(RD_CfgNode *n = children.first; n != 0; n = n->next) + { + DR_FStrList cfg_fstrs = rd_title_fstrs_from_cfg(scratch.arena, n->v); + String8 cfg_string = dr_string_from_fstrs(scratch.arena, &cfg_fstrs); + FuzzyMatchRangeList ranges = fuzzy_match_find(scratch.arena, filter, cfg_string); + if(ranges.count == ranges.needle_part_count) + { + rd_cfg_list_push(scratch.arena, &children__filtered, n->v); + } + } + } accel->cmds = str8_array_from_list(arena, &cmds); accel->cmds_idx_range = r1u64(0, accel->cmds.count); - accel->cfgs = rd_cfg_array_from_list(arena, &children); + accel->cfgs = rd_cfg_array_from_list(arena, &children__filtered); accel->cfgs_idx_range = r1u64(accel->cmds.count + 0, accel->cmds.count + accel->cfgs.count); scratch_end(scratch); } diff --git a/src/raddbg/raddbg_views.c b/src/raddbg/raddbg_views.c index e527a098..473e0df8 100644 --- a/src/raddbg/raddbg_views.c +++ b/src/raddbg/raddbg_views.c @@ -3565,7 +3565,7 @@ rd_eval_color_from_eval(E_Eval eval) EV_EXPAND_RULE_INFO_FUNCTION_DEF(color) { EV_ExpandInfo info = {0}; - info.row_count = 8; + info.row_count = 12; info.single_item = 1; return info; }