X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Fevent.c;h=17dd7f72bfe8fd9bbe80c6ccd8afcb35b9d3d3f3;hb=28ab59d0baef178a8629ec9fb517ba75efb46ea8;hp=691b4f95cd21aa77d22a9da124f0ee2de9a18379;hpb=ef0e06bcabd5f5fcf609b60d6558c2bdded5e496;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/event.c b/src/lib/lttng-ctl/event.c index 691b4f95c..17dd7f72b 100644 --- a/src/lib/lttng-ctl/event.c +++ b/src/lib/lttng-ctl/event.c @@ -51,6 +51,7 @@ end: return event; error: free(event); + event = NULL; goto end; } @@ -78,16 +79,15 @@ int lttng_event_get_filter_expression(struct lttng_event *event, const char **filter_expression) { int ret = 0; - struct lttcomm_event_extended_header *ext_header; + struct lttng_event_extended *event_extended; if (!event || !filter_expression) { ret = -LTTNG_ERR_INVALID; goto end; } - ext_header = event->extended.ptr; - - if (!ext_header) { + event_extended = (struct lttng_event_extended *) event->extended.ptr; + if (!event_extended) { /* * This can happen since the lttng_event structure is * used for other tasks where this pointer is never set. @@ -96,42 +96,35 @@ int lttng_event_get_filter_expression(struct lttng_event *event, goto end; } - if (ext_header->filter_len) { - *filter_expression = ((const char *) (ext_header)) + - sizeof(*ext_header); - } else { - *filter_expression = NULL; - } - + *filter_expression = event_extended->filter_expression; end: return ret; } int lttng_event_get_exclusion_name_count(struct lttng_event *event) { - int ret; - struct lttcomm_event_extended_header *ext_header; + int ret = 0; + struct lttng_event_extended *event_extended; if (!event) { ret = -LTTNG_ERR_INVALID; goto end; } - ext_header = event->extended.ptr; - if (!ext_header) { + event_extended = (struct lttng_event_extended *) event->extended.ptr; + if (!event_extended) { /* * This can happen since the lttng_event structure is * used for other tasks where this pointer is never set. */ - ret = 0; goto end; } - if (ext_header->nb_exclusions > INT_MAX) { + if (event_extended->exclusions.count > INT_MAX) { ret = -LTTNG_ERR_OVERFLOW; goto end; } - ret = (int) ext_header->nb_exclusions; + ret = (int) event_extended->exclusions.count; end: return ret; } @@ -140,36 +133,41 @@ int lttng_event_get_exclusion_name(struct lttng_event *event, size_t index, const char **exclusion_name) { int ret = 0; - struct lttcomm_event_extended_header *ext_header; - void *at; + struct lttng_event_extended *event_extended; if (!event || !exclusion_name) { ret = -LTTNG_ERR_INVALID; goto end; } - ext_header = event->extended.ptr; - if (!ext_header) { - ret = -LTTNG_ERR_INVALID; + if (index > UINT_MAX) { + ret = -LTTNG_ERR_OVERFLOW; goto end; } - if (index >= ext_header->nb_exclusions) { + event_extended = (struct lttng_event_extended *) event->extended.ptr; + if (!event_extended) { + /* + * This can happen since the lttng_event structure is + * used for other tasks where this pointer is never set. + */ ret = -LTTNG_ERR_INVALID; goto end; } - at = (void *) ext_header + sizeof(*ext_header); - at += ext_header->filter_len; - at += index * LTTNG_SYMBOL_NAME_LEN; - *exclusion_name = at; + if (index >= event_extended->exclusions.count) { + ret = -LTTNG_ERR_INVALID; + goto end; + } + *exclusion_name = event_extended->exclusions.strings + + (index * LTTNG_SYMBOL_NAME_LEN); end: return ret; } -struct lttng_userspace_probe_location * -lttng_event_get_userspace_probe_location(struct lttng_event *event) +const struct lttng_userspace_probe_location * +lttng_event_get_userspace_probe_location(const struct lttng_event *event) { struct lttng_userspace_probe_location *probe_location = NULL; struct lttng_event_extended *event_extended;