+static void increment_extended_len(const char *filter_expression,
+ struct lttng_event_exclusion *exclusion, size_t *extended_len)
+{
+ *extended_len += sizeof(struct lttcomm_event_extended_header);
+
+ if (filter_expression) {
+ *extended_len += strlen(filter_expression) + 1;
+ }
+
+ if (exclusion) {
+ *extended_len += exclusion->count * LTTNG_SYMBOL_NAME_LEN;
+ }
+}
+
+static void append_extended_info(const char *filter_expression,
+ struct lttng_event_exclusion *exclusion, void **extended_at)
+{
+ struct lttcomm_event_extended_header extended_header;
+ size_t filter_len = 0;
+ size_t nb_exclusions = 0;
+
+ if (filter_expression) {
+ filter_len = strlen(filter_expression) + 1;
+ }
+
+ if (exclusion) {
+ nb_exclusions = exclusion->count;
+ }
+
+ /* Set header fields */
+ extended_header.filter_len = filter_len;
+ extended_header.nb_exclusions = nb_exclusions;
+
+ /* Copy header */
+ memcpy(*extended_at, &extended_header, sizeof(extended_header));
+ *extended_at += sizeof(extended_header);
+
+ /* Copy filter string */
+ if (filter_expression) {
+ memcpy(*extended_at, filter_expression, filter_len);
+ *extended_at += filter_len;
+ }
+
+ /* Copy exclusion names */
+ if (exclusion) {
+ size_t len = nb_exclusions * LTTNG_SYMBOL_NAME_LEN;
+
+ memcpy(*extended_at, &exclusion->names, len);
+ *extended_at += len;
+ }
+}
+