#include <babeltrace/ctf-ir/event-fields-internal.h>
#include <babeltrace/ctf-writer/functor-internal.h>
#include <babeltrace/ctf-ir/stream-class-internal.h>
-#include <babeltrace/ctf-writer/stream-internal.h>
-#include <babeltrace/ctf-writer/stream.h>
+#include <babeltrace/ctf-ir/stream-internal.h>
+#include <babeltrace/ctf-ir/stream.h>
#include <babeltrace/compiler.h>
#include <stdio.h>
#include <stdlib.h>
goto error;
}
+ ret = bt_ctf_stream_class_set_byte_order(stream_class,
+ writer->byte_order == LITTLE_ENDIAN ?
+ BT_CTF_BYTE_ORDER_LITTLE_ENDIAN : BT_CTF_BYTE_ORDER_BIG_ENDIAN);
+ if (ret) {
+ goto error;
+ }
+
stream = bt_ctf_stream_create(stream_class);
if (!stream) {
goto error;
bt_ctf_stream_set_flush_callback(stream, (flush_func)stream_flush_cb,
writer);
- ret = bt_ctf_stream_class_set_byte_order(stream->stream_class,
- writer->byte_order == LITTLE_ENDIAN ?
- BT_CTF_BYTE_ORDER_LITTLE_ENDIAN : BT_CTF_BYTE_ORDER_BIG_ENDIAN);
- if (ret) {
- goto error;
- }
for (i = 0; i < writer->stream_classes->len; i++) {
if (writer->stream_classes->pdata[i] == stream->stream_class) {
}
if (!stream_class_found) {
- if (bt_ctf_stream_class_set_id(stream->stream_class,
- writer->next_stream_id++)) {
- goto error;
+ int64_t stream_id = bt_ctf_stream_class_get_id(stream_class);
+ if (stream_id < 0) {
+ if (bt_ctf_stream_class_set_id(stream->stream_class,
+ writer->next_stream_id++)) {
+ goto error;
+ }
}
+ for (i = 0; i < writer->stream_classes->len; i++) {
+ if (stream_id == bt_ctf_stream_class_get_id(
+ writer->stream_classes->pdata[i])) {
+ /* Duplicate stream id found */
+ goto error;
+ }
+ }
bt_ctf_stream_class_get(stream->stream_class);
g_ptr_array_add(writer->stream_classes, stream->stream_class);
}
stream_id = bt_ctf_field_structure_get_field(
writer->trace_packet_header, "stream_id");
- bt_ctf_field_unsigned_integer_set_value(stream_id, stream->id);
+ bt_ctf_field_unsigned_integer_set_value(stream_id, stream->stream_class->id);
bt_ctf_field_put(stream_id);
/* Write the trace_packet_header */