X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fir%2Fevent-fields.c;h=3358ff0ed0f68af8055b7ab6c8a8436b0b3b0c33;hb=d9548894df258a8984385470c9c251c99329e01c;hp=2ca21f10059b05bc1a459a79ef7334d8749a8afc;hpb=4fef87ab8b7ab9bd6b526839ec57739a5ef383cf;p=babeltrace.git diff --git a/formats/ctf/ir/event-fields.c b/formats/ctf/ir/event-fields.c index 2ca21f10..3358ff0e 100644 --- a/formats/ctf/ir/event-fields.c +++ b/formats/ctf/ir/event-fields.c @@ -29,7 +29,10 @@ #include #include #include +#include +#include #include +#include #define PACKET_LEN_INCREMENT (getpagesize() * 8 * CHAR_BIT) @@ -57,7 +60,7 @@ static struct bt_ctf_field *bt_ctf_field_string_create(struct bt_ctf_field_type *); static -void bt_ctf_field_destroy(struct bt_ctf_ref *); +void bt_ctf_field_destroy(struct bt_object *); static void bt_ctf_field_integer_destroy(struct bt_ctf_field *); static @@ -249,8 +252,8 @@ struct bt_ctf_field *bt_ctf_field_create(struct bt_ctf_field_type *type) /* The type's declaration can't change after this point */ bt_ctf_field_type_freeze(type); - bt_ctf_field_type_get(type); - bt_ctf_ref_init(&field->ref_count); + bt_get(type); + bt_object_init(field, bt_ctf_field_destroy); field->type = type; error: return field; @@ -258,16 +261,12 @@ error: void bt_ctf_field_get(struct bt_ctf_field *field) { - if (field) { - bt_ctf_ref_get(&field->ref_count); - } + bt_get(field); } void bt_ctf_field_put(struct bt_ctf_field *field) { - if (field) { - bt_ctf_ref_put(&field->ref_count, bt_ctf_field_destroy); - } + bt_put(field); } struct bt_ctf_field_type *bt_ctf_field_get_type(struct bt_ctf_field *field) @@ -279,11 +278,64 @@ struct bt_ctf_field_type *bt_ctf_field_get_type(struct bt_ctf_field *field) } ret = field->type; - bt_ctf_field_type_get(ret); + bt_get(ret); +end: + return ret; +} + +enum ctf_type_id bt_ctf_field_get_type_id(struct bt_ctf_field *field) +{ + enum ctf_type_id ret = CTF_TYPE_UNKNOWN; + + if (!field) { + goto end; + } + + ret = bt_ctf_field_type_get_type_id(field->type); end: return ret; } +int bt_ctf_field_is_integer(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_INTEGER; +} + +int bt_ctf_field_is_floating_point(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_FLOAT; +} + +int bt_ctf_field_is_enumeration(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_ENUM; +} + +int bt_ctf_field_is_string(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_STRING; +} + +int bt_ctf_field_is_structure(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_STRUCT; +} + +int bt_ctf_field_is_array(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_ARRAY; +} + +int bt_ctf_field_is_sequence(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_SEQUENCE; +} + +int bt_ctf_field_is_variant(struct bt_ctf_field *field) +{ + return bt_ctf_field_get_type_id(field) == CTF_TYPE_VARIANT; +} + struct bt_ctf_field *bt_ctf_field_sequence_get_length( struct bt_ctf_field *field) { @@ -301,7 +353,7 @@ struct bt_ctf_field *bt_ctf_field_sequence_get_length( sequence = container_of(field, struct bt_ctf_field_sequence, parent); ret = sequence->length; - bt_ctf_field_get(ret); + bt_get(ret); end: return ret; } @@ -339,7 +391,7 @@ int bt_ctf_field_sequence_set_length(struct bt_ctf_field *field, sequence = container_of(field, struct bt_ctf_field_sequence, parent); if (sequence->elements) { g_ptr_array_free(sequence->elements, TRUE); - bt_ctf_field_put(sequence->length); + bt_put(sequence->length); } sequence->elements = g_ptr_array_sized_new((size_t)sequence_length); @@ -349,9 +401,9 @@ int bt_ctf_field_sequence_set_length(struct bt_ctf_field *field, } g_ptr_array_set_free_func(sequence->elements, - (GDestroyNotify)bt_ctf_field_put); - g_ptr_array_set_size(sequence->elements, (size_t)sequence_length); - bt_ctf_field_get(length_field); + (GDestroyNotify) bt_put); + g_ptr_array_set_size(sequence->elements, (size_t) sequence_length); + bt_get(length_field); sequence->length = length_field; end: return ret; @@ -394,10 +446,10 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field( structure->fields->pdata[index] = new_field; end: - bt_ctf_field_get(new_field); + bt_get(new_field); error: if (field_type) { - bt_ctf_field_type_put(field_type); + bt_put(field_type); } return new_field; } @@ -435,7 +487,7 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field_by_index( ret = bt_ctf_field_type_structure_get_field(structure_type, &field_name, &field_type, index); - bt_ctf_field_type_put(structure_type); + bt_put(structure_type); if (ret) { goto error; } @@ -447,11 +499,9 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field_by_index( structure->fields->pdata[index] = ret_field; end: - bt_ctf_field_get(ret_field); + bt_get(ret_field); error: - if (field_type) { - bt_ctf_field_type_put(field_type); - } + bt_put(field_type); return ret_field; } @@ -488,14 +538,14 @@ int bt_ctf_field_structure_set_field(struct bt_ctf_field *field, } if (structure->fields->pdata[index]) { - bt_ctf_field_put(structure->fields->pdata[index]); + bt_put(structure->fields->pdata[index]); } structure->fields->pdata[index] = value; - bt_ctf_field_get(value); + bt_get(value); end: if (expected_field_type) { - bt_ctf_field_type_put(expected_field_type); + bt_put(expected_field_type); } return ret; } @@ -527,10 +577,10 @@ struct bt_ctf_field *bt_ctf_field_array_get_field(struct bt_ctf_field *field, array->elements->pdata[(size_t)index] = new_field; end: if (field_type) { - bt_ctf_field_type_put(field_type); + bt_put(field_type); } if (new_field) { - bt_ctf_field_get(new_field); + bt_get(new_field); } return new_field; } @@ -553,19 +603,19 @@ struct bt_ctf_field *bt_ctf_field_sequence_get_field(struct bt_ctf_field *field, } field_type = bt_ctf_field_type_sequence_get_element_type(field->type); - if (sequence->elements->pdata[(size_t)index]) { - new_field = sequence->elements->pdata[(size_t)index]; + if (sequence->elements->pdata[(size_t) index]) { + new_field = sequence->elements->pdata[(size_t) index]; goto end; } new_field = bt_ctf_field_create(field_type); - sequence->elements->pdata[(size_t)index] = new_field; + sequence->elements->pdata[(size_t) index] = new_field; end: if (field_type) { - bt_ctf_field_type_put(field_type); + bt_put(field_type); } if (new_field) { - bt_ctf_field_get(new_field); + bt_get(new_field); } return new_field; } @@ -620,12 +670,12 @@ struct bt_ctf_field *bt_ctf_field_variant_get_field(struct bt_ctf_field *field, bt_ctf_field_enumeration_get_container(variant->tag); cur_tag_enum_integer = container_of(cur_tag_container, struct bt_ctf_field_integer, parent); - bt_ctf_field_put(cur_tag_container); + bt_put(cur_tag_container); cur_tag_value = cur_tag_enum_integer->definition.value._signed; if (cur_tag_value == tag_enum_value) { new_field = variant->payload; - bt_ctf_field_get(new_field); + bt_get(new_field); goto end; } } @@ -641,14 +691,14 @@ struct bt_ctf_field *bt_ctf_field_variant_get_field(struct bt_ctf_field *field, goto end; } - bt_ctf_field_put(variant->tag); - bt_ctf_field_put(variant->payload); - bt_ctf_field_get(new_field); - bt_ctf_field_get(tag_field); + bt_put(variant->tag); + bt_put(variant->payload); + bt_get(new_field); + bt_get(tag_field); variant->tag = tag_field; variant->payload = new_field; end: - bt_ctf_field_put(tag_enum); + bt_put(tag_enum); return new_field; } @@ -669,7 +719,7 @@ struct bt_ctf_field *bt_ctf_field_variant_get_current_field( if (variant->payload) { current_field = variant->payload; - bt_ctf_field_get(current_field); + bt_get(current_field); goto end; } @@ -699,7 +749,7 @@ struct bt_ctf_field *bt_ctf_field_enumeration_get_container( } container = enumeration->payload; - bt_ctf_field_get(container); + bt_get(container); end: return container; } @@ -752,9 +802,9 @@ const char *bt_ctf_field_enumeration_get_mapping_name( } error_put_container_type: - bt_ctf_field_type_put(container_type); + bt_put(container_type); error_put_container: - bt_ctf_field_put(container); + bt_put(container); end: return name; } @@ -1129,7 +1179,7 @@ struct bt_ctf_field *bt_ctf_field_copy(struct bt_ctf_field *field) copy->payload_set = field->payload_set; ret = field_copy_funcs[type_id](field, copy); if (ret) { - bt_ctf_field_put(copy); + bt_put(copy); copy = NULL; } end: @@ -1208,7 +1258,7 @@ struct bt_ctf_field *bt_ctf_field_structure_create( struct bt_ctf_field_structure, 1); struct bt_ctf_field *field = NULL; - if (!structure || !structure_type->fields->len) { + if (!structure) { goto end; } @@ -1275,17 +1325,13 @@ struct bt_ctf_field *bt_ctf_field_string_create(struct bt_ctf_field_type *type) } static -void bt_ctf_field_destroy(struct bt_ctf_ref *ref) +void bt_ctf_field_destroy(struct bt_object *obj) { struct bt_ctf_field *field; struct bt_ctf_field_type *type; enum ctf_type_id type_id; - if (!ref) { - return; - } - - field = container_of(ref, struct bt_ctf_field, ref_count); + field = container_of(obj, struct bt_ctf_field, base); type = field->type; type_id = bt_ctf_field_type_get_type_id(type); if (type_id <= CTF_TYPE_UNKNOWN || @@ -1294,9 +1340,7 @@ void bt_ctf_field_destroy(struct bt_ctf_ref *ref) } field_destroy_funcs[type_id](field); - if (type) { - bt_ctf_field_type_put(type); - } + bt_put(type); } static @@ -1323,7 +1367,7 @@ void bt_ctf_field_enumeration_destroy(struct bt_ctf_field *field) enumeration = container_of(field, struct bt_ctf_field_enumeration, parent); - bt_ctf_field_put(enumeration->payload); + bt_put(enumeration->payload); g_free(enumeration); } @@ -1365,8 +1409,8 @@ void bt_ctf_field_variant_destroy(struct bt_ctf_field *field) } variant = container_of(field, struct bt_ctf_field_variant, parent); - bt_ctf_field_put(variant->tag); - bt_ctf_field_put(variant->payload); + bt_put(variant->tag); + bt_put(variant->payload); g_free(variant); } @@ -1397,7 +1441,7 @@ void bt_ctf_field_sequence_destroy(struct bt_ctf_field *field) if (sequence->elements) { g_ptr_array_free(sequence->elements, TRUE); } - bt_ctf_field_put(sequence->length); + bt_put(sequence->length); g_free(sequence); } @@ -1881,8 +1925,8 @@ int bt_ctf_field_string_serialize(struct bt_ctf_field *field, } } end: - bt_ctf_field_put(character); - bt_ctf_field_type_put(character_type); + bt_put(character); + bt_put(character_type); return ret; } @@ -2057,7 +2101,7 @@ int bt_ctf_field_sequence_copy(struct bt_ctf_field *src, /* copy source length */ dst_length = bt_ctf_field_copy(src_length); - bt_ctf_field_put(src_length); + bt_put(src_length); if (!dst_length) { ret = -1; @@ -2066,7 +2110,7 @@ int bt_ctf_field_sequence_copy(struct bt_ctf_field *src, /* this will initialize the destination sequence's internal array */ ret = bt_ctf_field_sequence_set_length(dst, dst_length); - bt_ctf_field_put(dst_length); + bt_put(dst_length); if (ret) { goto end; @@ -2127,9 +2171,13 @@ int increase_packet_size(struct ctf_stream_pos *pos) } pos->packet_size += PACKET_LEN_INCREMENT; - ret = posix_fallocate(pos->fd, pos->mmap_offset, - pos->packet_size / CHAR_BIT); + do { + ret = bt_posix_fallocate(pos->fd, pos->mmap_offset, + pos->packet_size / CHAR_BIT); + } while (ret == EINTR); if (ret) { + errno = EINTR; + ret = -1; goto end; }