mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-29 23:01:03 +01:00
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:
parent
0b2fe4a5cd
commit
7609064fc3
@ -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);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user