X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fevent-rule%2Ftracepoint.c;h=d6f3b9fb7b0b871b2c505cdf578daa60ebaff1aa;hp=6bdb754bc98f5f7917dbeb93bd59f0b10f8b663b;hb=44760c20f4fc255b63894ca758cf2ee5f253220b;hpb=ce0b1d61919f37517a6212f7af2afe0fa1b1dcb0 diff --git a/src/common/event-rule/tracepoint.c b/src/common/event-rule/tracepoint.c index 6bdb754bc..d6f3b9fb7 100644 --- a/src/common/event-rule/tracepoint.c +++ b/src/common/event-rule/tracepoint.c @@ -16,6 +16,7 @@ #include #include #include +#include #define IS_TRACEPOINT_EVENT_RULE(rule) \ (lttng_event_rule_get_type(rule) == LTTNG_EVENT_RULE_TYPE_TRACEPOINT) @@ -599,6 +600,41 @@ static unsigned long lttng_event_rule_tracepoint_hash( return hash; } +static struct lttng_event *lttng_event_rule_tracepoint_generate_lttng_event( + const struct lttng_event_rule *rule) +{ + int ret; + const struct lttng_event_rule_tracepoint *tracepoint; + struct lttng_event *local_event = NULL; + struct lttng_event *event = NULL; + + tracepoint = container_of( + rule, const struct lttng_event_rule_tracepoint, parent); + + local_event = zmalloc(sizeof(*local_event)); + if (!local_event) { + goto error; + } + + local_event->type = LTTNG_EVENT_TRACEPOINT; + ret = lttng_strncpy(local_event->name, tracepoint->pattern, + sizeof(local_event->name)); + if (ret) { + ERR("Truncation occurred when copying event rule pattern to `lttng_event` structure: pattern = '%s'", + tracepoint->pattern); + goto error; + } + + local_event->loglevel_type = tracepoint->loglevel.type; + local_event->loglevel = tracepoint->loglevel.value; + + event = local_event; + local_event = NULL; +error: + free(local_event); + return event; +} + struct lttng_event_rule *lttng_event_rule_tracepoint_create( enum lttng_domain_type domain_type) { @@ -629,6 +665,8 @@ struct lttng_event_rule *lttng_event_rule_tracepoint_create( tp_rule->parent.generate_exclusions = lttng_event_rule_tracepoint_generate_exclusions; tp_rule->parent.hash = lttng_event_rule_tracepoint_hash; + tp_rule->parent.generate_lttng_event = + lttng_event_rule_tracepoint_generate_lttng_event; tp_rule->domain = domain_type; tp_rule->loglevel.type = LTTNG_EVENT_LOGLEVEL_ALL;