- struct lttng_payload_view payload_copy_view =
- lttng_payload_view_from_payload(
- &payload_copy, 0, -1);
-
- for (i = 0; i < nb_events; i++) {
- struct lttng_event *event = (typeof(event))(
- listing.data +
- (sizeof(struct lttng_event) * i));
- const struct lttcomm_event_extended_header *ext_comm =
- (typeof(ext_comm)) comm_ext_at;
- struct lttng_event_extended *event_extended =
- (typeof(event_extended))(listing.data +
- listing.size);
-
- /* Insert struct lttng_event_extended. */
- ret = lttng_dynamic_buffer_set_size(&listing,
- listing.size + sizeof(*event_extended));
- if (ret) {
- ret = -LTTNG_ERR_NOMEM;
- goto free_dynamic_buffer;
- }
- event->extended.ptr = event_extended;
-
- comm_ext_at += sizeof(*ext_comm);
-
- /* Insert filter expression. */
- if (ext_comm->filter_len) {
- event_extended->filter_expression =
- listing.data + listing.size;
- ret = lttng_dynamic_buffer_append(&listing,
- comm_ext_at,
- ext_comm->filter_len);
- if (ret) {
- ret = -LTTNG_ERR_NOMEM;
- goto free_dynamic_buffer;
- }
- comm_ext_at += ext_comm->filter_len;
- }
-
- /* Insert exclusions. */
- if (ext_comm->nb_exclusions) {
- event_extended->exclusions.count =
- ext_comm->nb_exclusions;
- event_extended->exclusions.strings =
- listing.data + listing.size;
-
- ret = lttng_dynamic_buffer_append(&listing,
- comm_ext_at,
- ext_comm->nb_exclusions *
- LTTNG_SYMBOL_NAME_LEN);
- if (ret) {
- ret = -LTTNG_ERR_NOMEM;
- goto free_dynamic_buffer;
- }
- comm_ext_at += ext_comm->nb_exclusions *
- LTTNG_SYMBOL_NAME_LEN;
- }
-
- /* Insert padding to align to 64-bits. */
- ret = lttng_dynamic_buffer_set_size(&listing,
- ALIGN_TO(listing.size,
- sizeof(uint64_t)));
- if (ret) {
- ret = -LTTNG_ERR_NOMEM;
- goto free_dynamic_buffer;
- }
-
- /* Insert flattened userspace probe location. */
- if (ext_comm->userspace_probe_location_len) {
- struct lttng_userspace_probe_location
- *probe_location = NULL;
- struct lttng_payload_view probe_location_view = lttng_payload_view_from_view(
- &payload_copy_view,
- (const char *) comm_ext_at -
- payload_copy_view.buffer.data,
- ext_comm->userspace_probe_location_len);
-
- if (!lttng_payload_view_is_valid(&probe_location_view)) {
- ret = -LTTNG_ERR_PROBE_LOCATION_INVAL;
- goto free_dynamic_buffer;
- }
-
- ret = lttng_userspace_probe_location_create_from_payload(
- &probe_location_view,
- &probe_location);
- if (ret < 0) {
- ret = -LTTNG_ERR_PROBE_LOCATION_INVAL;
- goto free_dynamic_buffer;
- }
-
- event_extended->probe_location = (struct lttng_userspace_probe_location
- *) (listing.data +
- listing.size);
- ret = lttng_userspace_probe_location_flatten(
- probe_location, &listing);
- lttng_userspace_probe_location_destroy(
- probe_location);
- if (ret < 0) {
- ret = -LTTNG_ERR_PROBE_LOCATION_INVAL;
- goto free_dynamic_buffer;
- }
-
- comm_ext_at += ext_comm->userspace_probe_location_len;
- }