From ed5b5bbd98b60355e8dec0d1e6507b0c6a132b0a Mon Sep 17 00:00:00 2001 From: JP Ikaheimonen Date: Thu, 7 Nov 2013 12:22:35 +0200 Subject: [PATCH] Add a check against excluders When matching enablers with events, first check against all excluders of the enabler. If the event matches with any of the excluders, then the event does not match with the enabler. [ Edit by Mathieu Desnoyers: apply coding style changes. ] Signed-off-by: JP Ikaheimonen Signed-off-by: Mathieu Desnoyers --- liblttng-ust/lttng-events.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/liblttng-ust/lttng-events.c b/liblttng-ust/lttng-events.c index 915cffb7..61021f3a 100644 --- a/liblttng-ust/lttng-events.c +++ b/liblttng-ust/lttng-events.c @@ -491,6 +491,31 @@ static int lttng_desc_match_enabler(const struct lttng_event_desc *desc, struct lttng_enabler *enabler) { + struct lttng_ust_excluder_node *excluder; + + /* If event matches with an excluder, return 'does not match' */ + cds_list_for_each_entry(excluder, &enabler->excluder_head, node) { + int count; + + for (count = 0; count < excluder->excluder.count; count++) { + int found, len; + char *excluder_name; + + excluder_name = (char *) (excluder->excluder.names) + + count * LTTNG_UST_SYM_NAME_LEN; + len = strnlen(excluder_name, LTTNG_UST_SYM_NAME_LEN); + if (len > 0 && excluder_name[len - 1] == '*') { + found = !strncmp(desc->name, excluder_name, + len - 1); + } else { + found = !strncmp(desc->name, excluder_name, + LTTNG_UST_SYM_NAME_LEN - 1); + } + if (found) { + return 0; + } + } + } switch (enabler->type) { case LTTNG_ENABLER_WILDCARD: return lttng_desc_match_wildcard_enabler(desc, enabler); -- 2.34.1