X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fctf-writer%2Fwriter.c;fp=lib%2Fctf-writer%2Fwriter.c;h=b51dd7fff7244dd4329f5f2b9c68f1accd2a97c4;hb=3dca22768a95bef664012559aa9ac977091de6ac;hp=a4ad7fe852bc46ec32a3fbae0e85ad9f1e60a792;hpb=d975f66c5dcfc7eade13db3edbc975d2055dfe4b;p=babeltrace.git diff --git a/lib/ctf-writer/writer.c b/lib/ctf-writer/writer.c index a4ad7fe8..b51dd7ff 100644 --- a/lib/ctf-writer/writer.c +++ b/lib/ctf-writer/writer.c @@ -30,13 +30,13 @@ #include #include -#include -#include -#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include #include #include #include @@ -54,43 +54,42 @@ static void bt_ctf_writer_destroy(struct bt_object *obj); static -int init_trace_packet_header(struct bt_trace *trace) +int init_trace_packet_header(struct bt_ctf_trace *trace) { int ret = 0; - struct bt_field *magic = NULL, *uuid_array = NULL; - struct bt_field_type *_uint32_t = + struct bt_ctf_field_type *_uint32_t = get_field_type(FIELD_TYPE_ALIAS_UINT32_T); - struct bt_field_type *_uint8_t = + struct bt_ctf_field_type *_uint8_t = get_field_type(FIELD_TYPE_ALIAS_UINT8_T); - struct bt_field_type *trace_packet_header_type = - bt_field_type_structure_create(); - struct bt_field_type *uuid_array_type = - bt_field_type_array_create(_uint8_t, 16); + struct bt_ctf_field_type *trace_packet_header_type = + bt_ctf_field_type_structure_create(); + struct bt_ctf_field_type *uuid_array_type = + bt_ctf_field_type_array_create(_uint8_t, 16); if (!trace_packet_header_type || !uuid_array_type) { ret = -1; goto end; } - ret = bt_field_type_structure_add_field(trace_packet_header_type, + ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type, _uint32_t, "magic"); if (ret) { goto end; } - ret = bt_field_type_structure_add_field(trace_packet_header_type, + ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type, uuid_array_type, "uuid"); if (ret) { goto end; } - ret = bt_field_type_structure_add_field(trace_packet_header_type, + ret = bt_ctf_field_type_structure_add_field(trace_packet_header_type, _uint32_t, "stream_id"); if (ret) { goto end; } - ret = bt_trace_set_packet_header_type(trace, + ret = bt_ctf_trace_set_packet_header_field_type(trace, trace_packet_header_type); if (ret) { goto end; @@ -99,8 +98,6 @@ end: bt_put(uuid_array_type); bt_put(_uint32_t); bt_put(_uint8_t); - bt_put(magic); - bt_put(uuid_array); bt_put(trace_packet_header_type); return ret; } @@ -129,7 +126,7 @@ struct bt_ctf_writer *bt_ctf_writer_create(const char *path) goto error_destroy; } - writer->trace = bt_trace_create(); + writer->trace = bt_ctf_trace_create(); if (!writer->trace) { goto error_destroy; } @@ -146,17 +143,16 @@ struct bt_ctf_writer *bt_ctf_writer_create(const char *path) goto error_destroy; } - ret = bt_trace_set_uuid(writer->trace, uuid); + ret = bt_ctf_trace_set_uuid(writer->trace, uuid); if (ret) { goto error_destroy; } - writer->trace->is_created_by_writer = 1; bt_object_set_parent(writer->trace, writer); bt_put(writer->trace); /* Default to little-endian */ - ret = bt_ctf_writer_set_byte_order(writer, BT_BYTE_ORDER_NATIVE); + ret = bt_ctf_writer_set_byte_order(writer, BT_CTF_BYTE_ORDER_NATIVE); BT_ASSERT(ret == 0); /* Create trace directory if necessary and open a metadata file */ @@ -203,9 +199,9 @@ void bt_ctf_writer_destroy(struct bt_object *obj) g_free(writer); } -struct bt_trace *bt_ctf_writer_get_trace(struct bt_ctf_writer *writer) +struct bt_ctf_trace *bt_ctf_writer_get_trace(struct bt_ctf_writer *writer) { - struct bt_trace *trace = NULL; + struct bt_ctf_trace *trace = NULL; if (!writer) { goto end; @@ -217,10 +213,10 @@ end: return trace; } -struct bt_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, - struct bt_stream_class *stream_class) +struct bt_ctf_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, + struct bt_ctf_stream_class *stream_class) { - struct bt_stream *stream = NULL; + struct bt_ctf_stream *stream = NULL; int stream_class_count; bt_bool stream_class_found = BT_FALSE; int i; @@ -230,14 +226,14 @@ struct bt_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, } /* Make sure the stream class is part of the writer's trace */ - stream_class_count = bt_trace_get_stream_class_count(writer->trace); + stream_class_count = bt_ctf_trace_get_stream_class_count(writer->trace); if (stream_class_count < 0) { goto error; } for (i = 0; i < stream_class_count; i++) { - struct bt_stream_class *existing_stream_class = - bt_trace_get_stream_class_by_index( + struct bt_ctf_stream_class *existing_stream_class = + bt_ctf_trace_get_stream_class_by_index( writer->trace, i); if (existing_stream_class == stream_class) { @@ -252,7 +248,7 @@ struct bt_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, } if (!stream_class_found) { - int ret = bt_trace_add_stream_class(writer->trace, + int ret = bt_ctf_trace_add_stream_class(writer->trace, stream_class); if (ret) { @@ -260,7 +256,7 @@ struct bt_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, } } - stream = bt_stream_create(stream_class, NULL); + stream = bt_ctf_stream_create_with_id(stream_class, NULL, -1ULL); if (!stream) { goto error; } @@ -282,7 +278,7 @@ int bt_ctf_writer_add_environment_field(struct bt_ctf_writer *writer, goto end; } - ret = bt_trace_set_environment_field_string(writer->trace, + ret = bt_ctf_trace_set_environment_field_string(writer->trace, name, value); end: return ret; @@ -297,7 +293,7 @@ int bt_ctf_writer_add_environment_field_int64(struct bt_ctf_writer *writer, goto end; } - ret = bt_trace_set_environment_field_integer(writer->trace, name, + ret = bt_ctf_trace_set_environment_field_integer(writer->trace, name, value); end: return ret; @@ -312,7 +308,7 @@ int bt_ctf_writer_add_clock(struct bt_ctf_writer *writer, goto end; } - ret = bt_trace_add_clock_class(writer->trace, clock->clock_class); + ret = bt_ctf_trace_add_clock_class(writer->trace, clock->clock_class); end: return ret; } @@ -325,7 +321,7 @@ char *bt_ctf_writer_get_metadata_string(struct bt_ctf_writer *writer) goto end; } - metadata_string = bt_trace_get_metadata_string( + metadata_string = bt_ctf_trace_get_metadata_string( writer->trace); end: return metadata_string; @@ -340,7 +336,7 @@ void bt_ctf_writer_flush_metadata(struct bt_ctf_writer *writer) goto end; } - metadata_string = bt_trace_get_metadata_string( + metadata_string = bt_ctf_trace_get_metadata_string( writer->trace); if (!metadata_string) { goto end; @@ -367,7 +363,7 @@ end: } int bt_ctf_writer_set_byte_order(struct bt_ctf_writer *writer, - enum bt_byte_order byte_order) + enum bt_ctf_byte_order byte_order) { int ret = 0; @@ -376,28 +372,80 @@ int bt_ctf_writer_set_byte_order(struct bt_ctf_writer *writer, goto end; } - if (byte_order == BT_BYTE_ORDER_NATIVE) { - byte_order = BT_MY_BYTE_ORDER; + if (byte_order == BT_CTF_BYTE_ORDER_NATIVE) { + byte_order = (int) BT_MY_BYTE_ORDER; } - ret = bt_trace_set_native_byte_order(writer->trace, + ret = bt_ctf_trace_set_native_byte_order(writer->trace, byte_order); end: return ret; } -void bt_ctf_writer_get(struct bt_ctf_writer *writer) +BT_HIDDEN +void bt_ctf_writer_freeze(struct bt_ctf_writer *writer) { - bt_get(writer); + writer->frozen = 1; } -void bt_ctf_writer_put(struct bt_ctf_writer *writer) +static +const unsigned int field_type_aliases_alignments[] = { + [FIELD_TYPE_ALIAS_UINT5_T] = 1, + [FIELD_TYPE_ALIAS_UINT8_T ... FIELD_TYPE_ALIAS_UINT16_T] = 8, + [FIELD_TYPE_ALIAS_UINT27_T] = 1, + [FIELD_TYPE_ALIAS_UINT32_T ... FIELD_TYPE_ALIAS_UINT64_T] = 8, +}; + +static +const unsigned int field_type_aliases_sizes[] = { + [FIELD_TYPE_ALIAS_UINT5_T] = 5, + [FIELD_TYPE_ALIAS_UINT8_T] = 8, + [FIELD_TYPE_ALIAS_UINT16_T] = 16, + [FIELD_TYPE_ALIAS_UINT27_T] = 27, + [FIELD_TYPE_ALIAS_UINT32_T] = 32, + [FIELD_TYPE_ALIAS_UINT64_T] = 64, +}; + +BT_HIDDEN +struct bt_ctf_field_type *get_field_type(enum field_type_alias alias) { - bt_put(writer); + int ret; + unsigned int alignment, size; + struct bt_ctf_field_type *field_type = NULL; + + if (alias >= NR_FIELD_TYPE_ALIAS) { + goto end; + } + + alignment = field_type_aliases_alignments[alias]; + size = field_type_aliases_sizes[alias]; + field_type = bt_ctf_field_type_integer_create(size); + ret = bt_ctf_field_type_set_alignment(field_type, alignment); + if (ret) { + BT_PUT(field_type); + } +end: + return field_type; } BT_HIDDEN -void bt_ctf_writer_freeze(struct bt_ctf_writer *writer) +const char *get_byte_order_string(enum bt_byte_order byte_order) { - writer->frozen = 1; + const char *string; + + switch (byte_order) { + case BT_BYTE_ORDER_LITTLE_ENDIAN: + string = "le"; + break; + case BT_BYTE_ORDER_BIG_ENDIAN: + string = "be"; + break; + case BT_BYTE_ORDER_NATIVE: + string = "native"; + break; + default: + abort(); + } + + return string; }