+ uf->type.u.legacy._struct.nr_fields = lt->u.legacy._struct.nr_fields;
+ (*iter_output)++;
+
+ ret = serialize_fields(session, fields, iter_output,
+ lt->u.legacy._struct.nr_fields,
+ lt->u.legacy._struct.fields);
+ if (ret)
+ return -EINVAL;
+ break;
+ }
+ case atype_struct_nestable:
+ {
+ struct ustctl_field *uf = &fields[*iter_output];
+
+ if (field_name) {
+ strncpy(uf->name, field_name, LTTNG_UST_SYM_NAME_LEN);
+ uf->name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
+ } else {
+ uf->name[0] = '\0';
+ }
+ uf->type.atype = ustctl_atype_struct_nestable;
+ uf->type.u.struct_nestable.nr_fields = lt->u.struct_nestable.nr_fields;
+ uf->type.u.struct_nestable.alignment = lt->u.struct_nestable.alignment;
+ (*iter_output)++;
+
+ ret = serialize_fields(session, fields, iter_output,
+ lt->u.struct_nestable.nr_fields,
+ lt->u.struct_nestable.fields);
+ if (ret)
+ return -EINVAL;
+ break;
+ }
+ case atype_enum_nestable:
+ {
+ struct ustctl_field *uf = &fields[*iter_output];
+ struct ustctl_type *ut = &uf->type;
+
+ if (field_name) {
+ strncpy(uf->name, field_name, LTTNG_UST_SYM_NAME_LEN);
+ uf->name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
+ } else {
+ uf->name[0] = '\0';
+ }
+ strncpy(ut->u.enum_nestable.name, lt->u.enum_nestable.desc->name,
+ LTTNG_UST_SYM_NAME_LEN);
+ ut->u.enum_nestable.name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
+ ut->atype = ustctl_atype_enum_nestable;