This feature will be used by the CLI to look up keys.
* associated to the matching patterned will be put there. The function returns
* PAT_MATCH or PAT_NOMATCH.
*/
-enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *smp, struct sample_storage **sample);
+enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *smp, struct sample_storage **sample, struct pattern **pat, struct pat_idx_elt **elt);
/*
*
continue;
}
- acl_res |= pat2acl(pattern_exec_match(&expr->pat, &smp, NULL));
+ acl_res |= pat2acl(pattern_exec_match(&expr->pat, &smp, NULL, NULL, NULL));
/*
* OK now acl_res holds the result of this expression
* as one of ACL_TEST_FAIL, ACL_TEST_MISS or ACL_TEST_PASS.
desc = arg_p[0].data.map;
/* Execute the match function. */
- ret = pattern_exec_match(desc->pat, smp, &sample);
+ ret = pattern_exec_match(desc->pat, smp, &sample, NULL, NULL);
if (ret != PAT_MATCH) {
if (!desc->def)
return 0;
* PAT_NOMATCH or PAT_MATCH.
*/
enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *smp,
- struct sample_storage **sample)
+ struct sample_storage **sample,
+ struct pattern **pat, struct pat_idx_elt **idx_elt)
{
enum pat_match_res pat_res = PAT_NOMATCH;
struct pattern *pattern;
elt = ebmb_entry(node, struct pat_idx_elt, node);
if (sample)
*sample = elt->smp;
+ if (idx_elt)
+ *idx_elt = elt;
}
}
pat_res |= expr->match(smp, pattern);
if (sample)
*sample = pattern->smp;
+ if (pat)
+ *pat = pattern;
}
}