From: Baptiste Assmann Date: Fri, 25 Apr 2014 14:57:03 +0000 (+0200) Subject: MINOR: pattern: find element in a reference X-Git-Tag: v1.5-dev24~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=953f74d1b3c95440e15198ff49095835bc689dae;p=thirdparty%2Fhaproxy.git MINOR: pattern: find element in a reference This function can be used to look for an entry in either an ACL or a MAP. --- diff --git a/include/proto/pattern.h b/include/proto/pattern.h index fdf9598280..e6ceba8ed3 100644 --- a/include/proto/pattern.h +++ b/include/proto/pattern.h @@ -181,6 +181,7 @@ struct pat_ref *pat_ref_lookup(const char *reference); struct pat_ref *pat_ref_lookupid(int unique_id); struct pat_ref *pat_ref_new(const char *reference, const char *display, unsigned int flags); struct pat_ref *pat_ref_newid(int unique_id, const char *display, unsigned int flags); +struct pat_ref_elt *pat_ref_find_elt(struct pat_ref *ref, const char *key); int pat_ref_append(struct pat_ref *ref, char *pattern, char *sample, int line); int pat_ref_add(struct pat_ref *ref, const char *pattern, const char *sample, char **err); int pat_ref_set(struct pat_ref *ref, const char *pattern, const char *sample, char **err); diff --git a/src/pattern.c b/src/pattern.c index 3238fbb43f..16aa09fbb7 100644 --- a/src/pattern.c +++ b/src/pattern.c @@ -1408,6 +1408,23 @@ int pat_ref_delete(struct pat_ref *ref, const char *key) return 1; } +/* + * find and return an element matching in a reference + * return NULL if not found + */ +struct pat_ref_elt *pat_ref_find_elt(struct pat_ref *ref, const char *key) +{ + struct pat_ref_elt *elt; + + list_for_each_entry(elt, &ref->head, list) { + if (strcmp(key, elt->pattern) == 0) + return elt; + } + + return NULL; +} + + /* This function modify the sample of the first pattern that match the . */ static inline int pat_ref_set_elt(struct pat_ref *ref, struct pat_ref_elt *elt, const char *value, char **err)