+ (*iter_field)++;
+ break;
+ case ustctl_atype_variant:
+ ret = _lttng_variant_statedump(session,
+ field->type.u.legacy.variant.nr_choices,
+ field->type.u.legacy.variant.tag_name,
+ 0,
+ fields, nr_fields, iter_field, nesting);
+ if (ret) {
+ goto end;
+ }
+ break;
+ case ustctl_atype_variant_nestable:
+ ret = _lttng_variant_statedump(session,
+ field->type.u.variant_nestable.nr_choices,
+ field->type.u.variant_nestable.tag_name,
+ field->type.u.variant_nestable.alignment,
+ fields, nr_fields, iter_field, nesting);
+ if (ret) {
+ goto end;
+ }
+ break;
+ case ustctl_atype_struct:
+ if (field->type.u.legacy._struct.nr_fields != 0) {
+ /* Currently only 0-length structures are supported. */
+ ret = -EINVAL;
+ goto end;
+ }
+ ret = print_tabs(session, nesting);
+ if (ret) {
+ goto end;
+ }
+ ret = lttng_metadata_printf(session,
+ "struct {} _%s;\n",
+ field->name);
+ (*iter_field)++;
+ break;
+ case ustctl_atype_struct_nestable:
+ if (field->type.u.struct_nestable.nr_fields != 0) {
+ /* Currently only 0-length structures are supported. */
+ ret = -EINVAL;
+ goto end;
+ }
+ ret = print_tabs(session, nesting);
+ if (ret) {
+ goto end;
+ }
+ if (field->type.u.struct_nestable.alignment) {
+ ret = lttng_metadata_printf(session,
+ "struct {} align(%u) _%s;\n",
+ field->type.u.struct_nestable.alignment * CHAR_BIT,
+ field->name);
+ if (ret) {
+ goto end;
+ }
+ } else {
+ ret = lttng_metadata_printf(session,
+ "struct {} _%s;\n",
+ field->name);
+ }
+ (*iter_field)++;
+ break;
+ case ustctl_atype_enum_nestable:
+ {
+ const struct ustctl_field *container_field;
+ const struct ustctl_type *container_type;
+
+ (*iter_field)++;
+ if (*iter_field >= nr_fields) {
+ ret = -EOVERFLOW;
+ goto end;
+ }
+ container_field = &fields[*iter_field];
+ container_type = &container_field->type;
+
+ /* Only integers are supported as container types. */
+ if (container_type->atype != ustctl_atype_integer) {
+ ret = -EINVAL;
+ goto end;
+ }
+ ret = ust_metadata_enum_statedump(session,
+ field->type.u.enum_nestable.name,
+ field->type.u.enum_nestable.id,
+ &container_type->u.integer,
+ field->name, iter_field, nesting);