Skip to content

Commit c9d6af3

Browse files
committed
MINOR: pattern: add pat_ref_gen_set() function
pat_ref_gen_set(ref, gen_id, value, err) modifies to <value> the sample of all patterns matching <key> and belonging to <gen_id> (generation id) under <ref> The goal is to be able to target a single subset from <ref>
1 parent 3d250b3 commit c9d6af3

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

include/haproxy/pattern.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ int pat_ref_push(struct pat_ref_elt *elt, struct pattern_expr *expr, int patflag
190190
int pat_ref_add(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
191191
int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample, char **err);
192192
int pat_ref_set_elt_duplicate(struct pat_ref *ref, struct pat_ref_elt *elt, const char *value, char **err);
193+
int pat_ref_gen_set(struct pat_ref *ref, unsigned int gen_id, const char *key, const char *value, char **err);
193194
int pat_ref_set_by_id(struct pat_ref *ref, struct pat_ref_elt *refelt, const char *value, char **err);
194195
int pat_ref_delete(struct pat_ref *ref, const char *key);
195196
void pat_ref_delete_by_ptr(struct pat_ref *ref, struct pat_ref_elt *elt);

src/pattern.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,26 @@ int pat_ref_set_elt_duplicate(struct pat_ref *ref, struct pat_ref_elt *elt, cons
17881788
return pat_ref_set_from_node(ref, &elt->node, value, err);
17891789
}
17901790

1791+
/* This function modifies to <value> the sample of all patterns matching <key>
1792+
* and belonging to <gen_id> under <ref>.
1793+
*/
1794+
int pat_ref_gen_set(struct pat_ref *ref, unsigned int gen_id,
1795+
const char *key, const char *value, char **err)
1796+
{
1797+
struct ebmb_node *node;
1798+
struct pat_ref_elt *elt;
1799+
1800+
/* Look for pattern in the reference. */
1801+
node = ebst_lookup(&ref->ebmb_root, key);
1802+
while (node) {
1803+
elt = ebmb_entry(node, struct pat_ref_elt, node);
1804+
if (elt->gen_id == gen_id)
1805+
break;
1806+
node = ebmb_next_dup(node);
1807+
}
1808+
return pat_ref_set_from_node(ref, node, value, err);
1809+
}
1810+
17911811
/* This function modifies to <value> the sample of all patterns matching <key>
17921812
* under <ref>.
17931813
*/

0 commit comments

Comments
 (0)