#include "ctf-meta-visitors.hpp"
-static
-int set_int_field_class_meaning_by_name(struct ctf_field_class *fc,
- const char *field_name, const char *id_name,
- enum ctf_field_class_meaning meaning)
+static int set_int_field_class_meaning_by_name(struct ctf_field_class *fc, const char *field_name,
+ const char *id_name,
+ enum ctf_field_class_meaning meaning)
{
- int ret = 0;
- uint64_t i;
-
- if (!fc) {
- goto end;
- }
-
- switch (fc->type) {
- case CTF_FIELD_CLASS_TYPE_INT:
- case CTF_FIELD_CLASS_TYPE_ENUM:
- {
- struct ctf_field_class_int *int_fc = ctf_field_class_as_int(fc);
-
- if (field_name && strcmp(field_name, id_name) == 0) {
- int_fc->meaning = meaning;
- }
-
- break;
- }
- case CTF_FIELD_CLASS_TYPE_STRUCT:
- {
- struct ctf_field_class_struct *struct_fc = ctf_field_class_as_struct(fc);
-
- for (i = 0; i < struct_fc->members->len; i++) {
- struct ctf_named_field_class *named_fc =
- ctf_field_class_struct_borrow_member_by_index(
- struct_fc, i);
-
- ret = set_int_field_class_meaning_by_name(named_fc->fc,
- named_fc->name->str, id_name, meaning);
- if (ret) {
- goto end;
- }
- }
-
- break;
- }
- case CTF_FIELD_CLASS_TYPE_VARIANT:
- {
- struct ctf_field_class_variant *var_fc = ctf_field_class_as_variant(fc);
-
- for (i = 0; i < var_fc->options->len; i++) {
- struct ctf_named_field_class *named_fc =
- ctf_field_class_variant_borrow_option_by_index(
- var_fc, i);
-
- ret = set_int_field_class_meaning_by_name(named_fc->fc,
- NULL, id_name, meaning);
- if (ret) {
- goto end;
- }
- }
-
- break;
- }
- case CTF_FIELD_CLASS_TYPE_ARRAY:
- case CTF_FIELD_CLASS_TYPE_SEQUENCE:
- {
- struct ctf_field_class_array_base *array_fc = ctf_field_class_as_array_base(fc);
-
- ret = set_int_field_class_meaning_by_name(array_fc->elem_fc,
- NULL, id_name, meaning);
- if (ret) {
- goto end;
- }
-
- break;
- }
- default:
- break;
- }
+ int ret = 0;
+ uint64_t i;
+
+ if (!fc) {
+ goto end;
+ }
+
+ switch (fc->type) {
+ case CTF_FIELD_CLASS_TYPE_INT:
+ case CTF_FIELD_CLASS_TYPE_ENUM:
+ {
+ struct ctf_field_class_int *int_fc = ctf_field_class_as_int(fc);
+
+ if (field_name && strcmp(field_name, id_name) == 0) {
+ int_fc->meaning = meaning;
+ }
+
+ break;
+ }
+ case CTF_FIELD_CLASS_TYPE_STRUCT:
+ {
+ struct ctf_field_class_struct *struct_fc = ctf_field_class_as_struct(fc);
+
+ for (i = 0; i < struct_fc->members->len; i++) {
+ struct ctf_named_field_class *named_fc =
+ ctf_field_class_struct_borrow_member_by_index(struct_fc, i);
+
+ ret = set_int_field_class_meaning_by_name(named_fc->fc, named_fc->name->str, id_name,
+ meaning);
+ if (ret) {
+ goto end;
+ }
+ }
+
+ break;
+ }
+ case CTF_FIELD_CLASS_TYPE_VARIANT:
+ {
+ struct ctf_field_class_variant *var_fc = ctf_field_class_as_variant(fc);
+
+ for (i = 0; i < var_fc->options->len; i++) {
+ struct ctf_named_field_class *named_fc =
+ ctf_field_class_variant_borrow_option_by_index(var_fc, i);
+
+ ret = set_int_field_class_meaning_by_name(named_fc->fc, NULL, id_name, meaning);
+ if (ret) {
+ goto end;
+ }
+ }
+
+ break;
+ }
+ case CTF_FIELD_CLASS_TYPE_ARRAY:
+ case CTF_FIELD_CLASS_TYPE_SEQUENCE:
+ {
+ struct ctf_field_class_array_base *array_fc = ctf_field_class_as_array_base(fc);
+
+ ret = set_int_field_class_meaning_by_name(array_fc->elem_fc, NULL, id_name, meaning);
+ if (ret) {
+ goto end;
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
end:
- return ret;
+ return ret;
}
-static
-int update_stream_class_meanings(struct ctf_stream_class *sc)
+static int update_stream_class_meanings(struct ctf_stream_class *sc)
{
- int ret = 0;
- struct ctf_field_class_int *int_fc;
- uint64_t i;
-
- if (!sc->is_translated) {
- if (sc->packet_context_fc) {
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "timestamp_begin");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_BEGINNING_TIME;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "timestamp_end");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_END_TIME;
-
- /*
- * Remove mapped clock class to avoid updating
- * the clock immediately when decoding.
- */
- int_fc->mapped_clock_class = NULL;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "events_discarded");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_DISC_EV_REC_COUNTER_SNAPSHOT;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "packet_seq_num");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_COUNTER_SNAPSHOT;
-
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "packet_size");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_EXP_PACKET_TOTAL_SIZE;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(sc->packet_context_fc), "content_size");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_EXP_PACKET_CONTENT_SIZE;
- }
- }
-
- if (sc->event_header_fc) {
- ret = set_int_field_class_meaning_by_name(
- sc->event_header_fc, NULL, "id",
- CTF_FIELD_CLASS_MEANING_EVENT_CLASS_ID);
- if (ret) {
- goto end;
- }
- }
- }
-
- for (i = 0; i < sc->event_classes->len; i++) {
- struct ctf_event_class *ec = (ctf_event_class *) sc->event_classes->pdata[i];
-
- if (ec->is_translated) {
- continue;
- }
- }
+ int ret = 0;
+ struct ctf_field_class_int *int_fc;
+ uint64_t i;
+
+ if (!sc->is_translated) {
+ if (sc->packet_context_fc) {
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "timestamp_begin");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_BEGINNING_TIME;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "timestamp_end");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_END_TIME;
+
+ /*
+ * Remove mapped clock class to avoid updating
+ * the clock immediately when decoding.
+ */
+ int_fc->mapped_clock_class = NULL;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "events_discarded");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_DISC_EV_REC_COUNTER_SNAPSHOT;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "packet_seq_num");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_PACKET_COUNTER_SNAPSHOT;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "packet_size");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_EXP_PACKET_TOTAL_SIZE;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(sc->packet_context_fc), "content_size");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_EXP_PACKET_CONTENT_SIZE;
+ }
+ }
+
+ if (sc->event_header_fc) {
+ ret = set_int_field_class_meaning_by_name(sc->event_header_fc, NULL, "id",
+ CTF_FIELD_CLASS_MEANING_EVENT_CLASS_ID);
+ if (ret) {
+ goto end;
+ }
+ }
+ }
+
+ for (i = 0; i < sc->event_classes->len; i++) {
+ struct ctf_event_class *ec = (ctf_event_class *) sc->event_classes->pdata[i];
+
+ if (ec->is_translated) {
+ continue;
+ }
+ }
end:
- return ret;
+ return ret;
}
BT_HIDDEN
int ctf_trace_class_update_meanings(struct ctf_trace_class *ctf_tc)
{
- int ret = 0;
- struct ctf_field_class_int *int_fc;
- struct ctf_named_field_class *named_fc;
- uint64_t i;
-
- if (!ctf_tc->is_translated && ctf_tc->packet_header_fc) {
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(ctf_tc->packet_header_fc), "magic");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_MAGIC;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(ctf_tc->packet_header_fc), "stream_id");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_STREAM_CLASS_ID;
- }
-
- int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
- ctf_field_class_as_struct(ctf_tc->packet_header_fc),
- "stream_instance_id");
- if (int_fc) {
- int_fc->meaning = CTF_FIELD_CLASS_MEANING_DATA_STREAM_ID;
- }
-
- named_fc = ctf_field_class_struct_borrow_member_by_name(
- ctf_field_class_as_struct(ctf_tc->packet_header_fc), "uuid");
- if (named_fc && named_fc->fc->type == CTF_FIELD_CLASS_TYPE_ARRAY) {
- struct ctf_field_class_array *array_fc =
- ctf_field_class_as_array(named_fc->fc);
-
- array_fc->meaning = CTF_FIELD_CLASS_MEANING_UUID;
- }
- }
-
- for (i = 0; i < ctf_tc->stream_classes->len; i++) {
- ret = update_stream_class_meanings(
- (ctf_stream_class *) ctf_tc->stream_classes->pdata[i]);
- if (ret) {
- goto end;
- }
- }
+ int ret = 0;
+ struct ctf_field_class_int *int_fc;
+ struct ctf_named_field_class *named_fc;
+ uint64_t i;
+
+ if (!ctf_tc->is_translated && ctf_tc->packet_header_fc) {
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(ctf_tc->packet_header_fc), "magic");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_MAGIC;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(ctf_tc->packet_header_fc), "stream_id");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_STREAM_CLASS_ID;
+ }
+
+ int_fc = ctf_field_class_struct_borrow_member_int_field_class_by_name(
+ ctf_field_class_as_struct(ctf_tc->packet_header_fc), "stream_instance_id");
+ if (int_fc) {
+ int_fc->meaning = CTF_FIELD_CLASS_MEANING_DATA_STREAM_ID;
+ }
+
+ named_fc = ctf_field_class_struct_borrow_member_by_name(
+ ctf_field_class_as_struct(ctf_tc->packet_header_fc), "uuid");
+ if (named_fc && named_fc->fc->type == CTF_FIELD_CLASS_TYPE_ARRAY) {
+ struct ctf_field_class_array *array_fc = ctf_field_class_as_array(named_fc->fc);
+
+ array_fc->meaning = CTF_FIELD_CLASS_MEANING_UUID;
+ }
+ }
+
+ for (i = 0; i < ctf_tc->stream_classes->len; i++) {
+ ret = update_stream_class_meanings((ctf_stream_class *) ctf_tc->stream_classes->pdata[i]);
+ if (ret) {
+ goto end;
+ }
+ }
end:
- return ret;
+ return ret;
}