-static
-int serialize_string_encoding(int32_t *ue,
- enum lttng_string_encodings le)
-{
- switch (le) {
- case lttng_encode_none:
- *ue = ustctl_encode_none;
- break;
- case lttng_encode_UTF8:
- *ue = ustctl_encode_UTF8;
- break;
- case lttng_encode_ASCII:
- *ue = ustctl_encode_ASCII;
- break;
- default:
- return -EINVAL;
- }
- return 0;
-}
-
-static
-int serialize_integer_type(struct ustctl_integer_type *uit,
- const struct lttng_integer_type *lit)
-{
- int32_t encoding;
-
- uit->size = lit->size;
- uit->signedness = lit->signedness;
- uit->reverse_byte_order = lit->reverse_byte_order;
- uit->base = lit->base;
- if (serialize_string_encoding(&encoding, lit->encoding))
- return -EINVAL;
- uit->encoding = encoding;
- uit->alignment = lit->alignment;
- return 0;
-}
-
-static
-int serialize_basic_type(struct lttng_session *session,
- enum ustctl_abstract_types *uatype,
- enum lttng_abstract_types atype,
- union _ustctl_basic_type *ubt,
- const union _lttng_basic_type *lbt)
-{
- switch (atype) {
- case atype_integer:
- {
- if (serialize_integer_type(&ubt->integer, &lbt->integer))
- return -EINVAL;
- *uatype = ustctl_atype_integer;
- break;
- }
- case atype_string:
- {
- int32_t encoding;
-
- if (serialize_string_encoding(&encoding, lbt->string.encoding))
- return -EINVAL;
- ubt->string.encoding = encoding;
- *uatype = ustctl_atype_string;
- break;
- }
- case atype_float:
- {
- struct ustctl_float_type *uft;
- const struct lttng_float_type *lft;
-
- uft = &ubt->_float;
- lft = &lbt->_float;
- uft->exp_dig = lft->exp_dig;
- uft->mant_dig = lft->mant_dig;
- uft->alignment = lft->alignment;
- uft->reverse_byte_order = lft->reverse_byte_order;
- *uatype = ustctl_atype_float;
- break;
- }
- case atype_enum:
- {
- strncpy(ubt->enumeration.name, lbt->enumeration.desc->name,
- LTTNG_UST_SYM_NAME_LEN);
- ubt->enumeration.name[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
- if (serialize_integer_type(&ubt->enumeration.container_type,
- &lbt->enumeration.container_type))
- return -EINVAL;
- if (session) {
- const struct lttng_enum *_enum;
-
- _enum = lttng_ust_enum_get_from_desc(session, lbt->enumeration.desc);
- if (!_enum)
- return -EINVAL;
- ubt->enumeration.id = _enum->id;
- } else {
- ubt->enumeration.id = -1ULL;
- }
- *uatype = ustctl_atype_enum;
- break;
- }
- case atype_array:
- case atype_array_nestable:
- case atype_sequence:
- case atype_sequence_nestable:
- case atype_enum_nestable:
- default:
- return -EINVAL;
- }
- return 0;
-}
-