MINOR: pattern: make the pattern matching function return a pointer to the matched element

This feature will be used by the CLI to look up keys.
This commit is contained in:
Thierry FOURNIER 2013-12-10 15:03:38 +01:00 committed by Willy Tarreau
parent 0b2fe4a5cd
commit 7609064fc3
4 changed files with 9 additions and 4 deletions

View File

@ -58,7 +58,7 @@ static inline int pat_find_match_name(const char *name)
* associated to the matching patterned will be put there. The function returns * associated to the matching patterned will be put there. The function returns
* PAT_MATCH or PAT_NOMATCH. * 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);
/* /*
* *

View File

@ -977,7 +977,7 @@ enum acl_test_res acl_exec_cond(struct acl_cond *cond, struct proxy *px, struct
continue; 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 * OK now acl_res holds the result of this expression
* as one of ACL_TEST_FAIL, ACL_TEST_MISS or ACL_TEST_PASS. * as one of ACL_TEST_FAIL, ACL_TEST_MISS or ACL_TEST_PASS.

View File

@ -467,7 +467,7 @@ static int sample_conv_map(const struct arg *arg_p, struct sample *smp)
desc = arg_p[0].data.map; desc = arg_p[0].data.map;
/* Execute the match function. */ /* 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 (ret != PAT_MATCH) {
if (!desc->def) if (!desc->def)
return 0; return 0;

View File

@ -1046,7 +1046,8 @@ int pattern_read_from_file(struct pattern_expr *expr,
* PAT_NOMATCH or PAT_MATCH. * PAT_NOMATCH or PAT_MATCH.
*/ */
enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *smp, 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; enum pat_match_res pat_res = PAT_NOMATCH;
struct pattern *pattern; struct pattern *pattern;
@ -1079,6 +1080,8 @@ enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *
elt = ebmb_entry(node, struct pat_idx_elt, node); elt = ebmb_entry(node, struct pat_idx_elt, node);
if (sample) if (sample)
*sample = elt->smp; *sample = elt->smp;
if (idx_elt)
*idx_elt = elt;
} }
} }
@ -1090,6 +1093,8 @@ enum pat_match_res pattern_exec_match(struct pattern_expr *expr, struct sample *
pat_res |= expr->match(smp, pattern); pat_res |= expr->match(smp, pattern);
if (sample) if (sample)
*sample = pattern->smp; *sample = pattern->smp;
if (pat)
*pat = pattern;
} }
} }