void bt_ctf_event_class_set_native_byte_order( struct bt_ctf_event_class *event_class, int byte_order) { if (!event_class) { return; } assert(byte_order == 0 || byte_order == LITTLE_ENDIAN || byte_order == BIG_ENDIAN); bt_ctf_field_type_set_native_byte_order(event_class->context, byte_order); bt_ctf_field_type_set_native_byte_order(event_class->fields, byte_order); }
int bt_ctf_trace_add_stream_class(struct bt_ctf_trace *trace, struct bt_ctf_stream_class *stream_class) { int ret, i; int64_t stream_id; if (!trace || !stream_class) { ret = -1; goto end; } for (i = 0; i < trace->stream_classes->len; i++) { if (trace->stream_classes->pdata[i] == stream_class) { /* Stream already registered to the trace */ ret = -1; goto end; } } ret = bt_ctf_stream_class_resolve_types(stream_class, trace); if (ret) { goto end; } stream_id = bt_ctf_stream_class_get_id(stream_class); if (stream_id < 0) { stream_id = trace->next_stream_id++; /* Try to assign a new stream id */ for (i = 0; i < trace->stream_classes->len; i++) { if (stream_id == bt_ctf_stream_class_get_id( trace->stream_classes->pdata[i])) { /* Duplicate stream id found */ ret = -1; goto end; } } if (bt_ctf_stream_class_set_id_no_check(stream_class, stream_id)) { /* TODO Should retry with a different stream id */ ret = -1; goto end; } } /* Set weak reference to trace in stream class */ ret = bt_ctf_stream_class_set_trace(stream_class, trace); if (ret) { /* Stream class already part of another trace */ goto end; } bt_get(stream_class); g_ptr_array_add(trace->stream_classes, stream_class); /* * Freeze the trace and its packet header. * * All field type byte orders set as "native" byte ordering can now be * safely set to trace's own endianness, including the stream class'. */ bt_ctf_field_type_set_native_byte_order(trace->packet_header_type, trace->byte_order); ret = bt_ctf_stream_class_set_byte_order(stream_class, trace->byte_order == LITTLE_ENDIAN ? BT_CTF_BYTE_ORDER_LITTLE_ENDIAN : BT_CTF_BYTE_ORDER_BIG_ENDIAN); if (ret) { goto end; } bt_ctf_stream_class_freeze(stream_class); if (!trace->frozen) { ret = bt_ctf_trace_freeze(trace); goto end; } end: if (ret) { (void) bt_ctf_stream_class_set_trace(stream_class, NULL); } return ret; }