return current_field;
}
+struct bt_ctf_field *bt_ctf_field_variant_get_tag(
+ struct bt_ctf_field *variant_field)
+{
+ struct bt_ctf_field *tag = NULL;
+ struct bt_ctf_field_variant *variant;
+
+ if (!variant_field ||
+ bt_ctf_field_type_get_type_id(variant_field->type) !=
+ BT_CTF_TYPE_ID_VARIANT) {
+ goto end;
+ }
+
+ variant = container_of(variant_field, struct bt_ctf_field_variant,
+ parent);
+ if (variant->tag) {
+ tag = bt_get(variant->tag);
+ }
+end:
+ return tag;
+}
+
struct bt_ctf_field *bt_ctf_field_enumeration_get_container(
struct bt_ctf_field *field)
{
}
size = integer_type->declaration.len;
- min_value = -((int64_t)1 << (size - 1));
- max_value = ((int64_t)1 << (size - 1)) - 1;
+ min_value = -(1ULL << (size - 1));
+ max_value = (1ULL << (size - 1)) - 1;
if (value < min_value || value > max_value) {
ret = -1;
goto end;
}
size = integer_type->declaration.len;
- max_value = (size == 64) ? UINT64_MAX : ((uint64_t)1 << size) - 1;
+ max_value = (size == 64) ? UINT64_MAX : ((uint64_t) 1 << size) - 1;
if (value > max_value) {
ret = -1;
goto end;
for (i = 0; i < structure->fields->len; i++) {
ret = bt_ctf_field_validate(structure->fields->pdata[i]);
if (ret) {
+ const char *name;
+ struct bt_ctf_field_type *field_type =
+ bt_ctf_field_get_type(field);
+
+ (void) bt_ctf_field_type_structure_get_field(field_type,
+ &name, NULL, i);
+ fprintf(stderr, "Field %s failed validation\n",
+ name ? name : "NULL");
+ bt_put(field_type);
goto end;
}
}
for (i = 0; i < sequence->elements->len; i++) {
ret = bt_ctf_field_validate(sequence->elements->pdata[i]);
if (ret) {
+ fprintf(stderr, "Failed to validate sequence field %zu\n", i);
goto end;
}
}
BT_HIDDEN
void bt_ctf_field_freeze(struct bt_ctf_field *field)
{
+ enum bt_ctf_type_id type_id;
+
if (!field) {
goto end;
}
- field_freeze_funcs[bt_ctf_field_get_type_id(field)](field);
+ type_id = bt_ctf_field_get_type_id(field);
+ if (type_id <= BT_CTF_TYPE_ID_UNKNOWN ||
+ type_id >= BT_CTF_NR_TYPE_IDS) {
+ goto end;
+ }
+ field_freeze_funcs[type_id](field);
end:
return;
}