X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-ir%2Ffields.c;h=3ee3b9502dce12f0a45eceb1e6080b57938aced6;hb=2225de6b8f05fe96d5b85d02e82fb5bf82903f44;hp=c1553547f6b4fdf67e0bd366533ec2a3e35e0cb9;hpb=fc25abce83d36b529e46bc6c027d61195754de64;p=babeltrace.git diff --git a/lib/ctf-ir/fields.c b/lib/ctf-ir/fields.c index c1553547..3ee3b950 100644 --- a/lib/ctf-ir/fields.c +++ b/lib/ctf-ir/fields.c @@ -39,8 +39,6 @@ #include #include -#define PACKET_LEN_INCREMENT (getpagesize() * 8 * CHAR_BIT) - static struct bt_ctf_field *bt_ctf_field_integer_create(struct bt_ctf_field_type *); static @@ -546,7 +544,7 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field_by_name( if (!g_hash_table_lookup_extended(structure->field_name_to_index, GUINT_TO_POINTER(field_quark), NULL, (gpointer *)&index)) { - BT_LOGW("Invalid parameter: no such field in structure field's type: " + BT_LOGV("Invalid parameter: no such field in structure field's type: " "struct-field-addr=%p, struct-ft-addr=%p, " "field-ft-addr=%p, name=\"%s\"", field, field->type, field_type, name); @@ -560,8 +558,14 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field_by_name( /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user could + * legitimately check if a structure field is set with + * this function: if the preconditions are satisfied, + * a NULL return value means this. + */ + BT_LOGV("Not creating a field because structure field is frozen: " + "struct-field-addr=%p, name=\"%s\"", field, name); goto end; } @@ -623,8 +627,14 @@ struct bt_ctf_field *bt_ctf_field_structure_get_field_by_index( /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user could + * legitimately check if a structure field is set with + * this function: if the preconditions are satisfied, + * a NULL return value means this. + */ + BT_LOGV("Not creating a field because structure field is frozen: " + "struct-field-addr=%p, index=%" PRIu64, field, index); goto end; } @@ -652,7 +662,7 @@ error: return ret_field; } -int bt_ctf_field_structure_set_field(struct bt_ctf_field *field, +int bt_ctf_field_structure_set_field_by_name(struct bt_ctf_field *field, const char *name, struct bt_ctf_field *value) { int ret = 0; @@ -706,7 +716,7 @@ int bt_ctf_field_structure_set_field(struct bt_ctf_field *field, if (!g_hash_table_lookup_extended(structure->field_name_to_index, GUINT_TO_POINTER(field_quark), NULL, (gpointer *) &index)) { - BT_LOGW("Invalid parameter: no such field in structure field's type: " + BT_LOGV("Invalid parameter: no such field in structure field's type: " "struct-field-addr=%p, struct-ft-addr=%p, " "field-ft-addr=%p, name=\"%s\"", field, field->type, value->type, name); @@ -764,8 +774,14 @@ struct bt_ctf_field *bt_ctf_field_array_get_field(struct bt_ctf_field *field, /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user could + * legitimately check if a array field is set with + * this function: if the preconditions are satisfied, + * a NULL return value means this. + */ + BT_LOGV("Not creating a field because array field is frozen: " + "array-field-addr=%p, index=%" PRIu64, field, index); goto end; } @@ -804,7 +820,7 @@ struct bt_ctf_field *bt_ctf_field_sequence_get_field(struct bt_ctf_field *field, sequence = container_of(field, struct bt_ctf_field_sequence, parent); if (!sequence->elements) { - BT_LOGW("Sequence field's elements do not exist: addr=%p", + BT_LOGV("Sequence field's elements do not exist: addr=%p", field); goto end; } @@ -824,8 +840,14 @@ struct bt_ctf_field *bt_ctf_field_sequence_get_field(struct bt_ctf_field *field, /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user could + * legitimately check if a sequence field is set with + * this function: if the preconditions are satisfied, + * a NULL return value means this. + */ + BT_LOGV("Not creating a field because sequence field is frozen: " + "sequence-field-addr=%p, index=%" PRIu64, field, index); goto end; } @@ -927,8 +949,15 @@ struct bt_ctf_field *bt_ctf_field_variant_get_field(struct bt_ctf_field *field, /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user could + * legitimately check if a variant field is set with + * this function: if the preconditions are satisfied, + * a NULL return value means this. + */ + BT_LOGV("Not creating a field because variant field is frozen: " + "variant-field-addr=%p, tag-field-addr=%p", + field, tag_field); goto end; } @@ -1048,8 +1077,15 @@ struct bt_ctf_field *bt_ctf_field_enumeration_get_container( if (!enumeration->payload) { /* We don't want to modify this field if it's frozen */ if (field->frozen) { - BT_LOGW("Invalid parameter: field is frozen: addr=%p", - field); + /* + * Not logging a warning here because the user + * could legitimately check if an enumeration's + * container field is set with this function: if + * the preconditions are satisfied, a NULL + * return value means this. + */ + BT_LOGV("Not creating a field because enumeration field is frozen: " + "enum-field-addr=%p", field); goto end; } @@ -2544,25 +2580,33 @@ int bt_ctf_field_structure_serialize(struct bt_ctf_field *field, for (i = 0; i < structure->fields->len; i++) { struct bt_ctf_field *member = g_ptr_array_index( structure->fields, i); + const char *field_name = NULL; + + if (BT_LOG_ON_WARN) { + ret = bt_ctf_field_type_structure_get_field( + field->type, &field_name, NULL, i); + assert(ret == 0); + } BT_LOGV("Serializing structure field's field: pos-offset=%" PRId64 ", " "field-addr=%p, index=%" PRId64, pos->offset, member, i); + + if (!member) { + BT_LOGW("Cannot serialize structure field's field: field is not set: " + "struct-field-addr=%p, " + "field-name=\"%s\", index=%" PRId64, + field, field_name, i); + ret = -1; + goto end; + } + ret = bt_ctf_field_serialize(member, pos, native_byte_order); if (ret) { - int this_ret; - const char *name; - struct bt_ctf_field_type *structure_type = - bt_ctf_field_get_type(field); - - this_ret = bt_ctf_field_type_structure_get_field( - structure_type, &name, NULL, i); - assert(this_ret == 0); BT_LOGW("Cannot serialize structure field's field: " "struct-field-addr=%p, field-addr=%p, " "field-name=\"%s\", index=%" PRId64, - field, member, name, i); - bt_put(structure_type); + field->type, member, field_name, i); break; } } @@ -2679,7 +2723,7 @@ int bt_ctf_field_string_serialize(struct bt_ctf_field *field, ret = bt_ctf_field_unsigned_integer_set_value(character, chr); if (ret) { - BT_LOGE("Cannot set character field's value: " + BT_LOGW("Cannot set character field's value: " "pos-offset=%" PRId64 ", field-addr=%p, " "index=%" PRId64 ", char-int=%" PRIu64, pos->offset, character, i, chr); @@ -2693,7 +2737,7 @@ int bt_ctf_field_string_serialize(struct bt_ctf_field *field, ret = bt_ctf_field_integer_serialize(character, pos, native_byte_order); if (ret) { - BT_LOGE_STR("Cannot serialize character field."); + BT_LOGW_STR("Cannot serialize character field."); goto end; } } @@ -2785,7 +2829,7 @@ int bt_ctf_field_structure_copy(struct bt_ctf_field *src, struct bt_ctf_field *field_copy = NULL; if (field) { - BT_LOGD("Copying structure field's field: src-field-addr=%p", + BT_LOGD("Copying structure field's field: src-field-addr=%p" "index=%" PRId64, field, i); field_copy = bt_ctf_field_copy(field); if (!field_copy) { @@ -3021,6 +3065,8 @@ int increase_packet_size(struct bt_ctf_stream_pos *pos) BT_LOGV("Increased packet size: pos-offset=%" PRId64 ", " "new-packet-size=%" PRIu64, pos->offset, pos->packet_size); + assert(pos->packet_size % 8 == 0); + end: return ret; }