+
+BT_HIDDEN
+int bt_stream_class_validate_single_clock_class(
+ struct bt_stream_class *stream_class,
+ struct bt_clock_class **expected_clock_class)
+{
+ int ret;
+ uint64_t i;
+
+ assert(stream_class);
+ assert(expected_clock_class);
+ ret = bt_validate_single_clock_class(stream_class->packet_context_type,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Stream class's packet context field type "
+ "is not recursively mapped to the "
+ "expected clock class: "
+ "stream-class-addr=%p, "
+ "stream-class-name=\"%s\", "
+ "stream-class-id=%" PRId64 ", "
+ "ft-addr=%p",
+ stream_class,
+ bt_stream_class_get_name(stream_class),
+ stream_class->id,
+ stream_class->packet_context_type);
+ goto end;
+ }
+
+ ret = bt_validate_single_clock_class(stream_class->event_header_type,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Stream class's event header field type "
+ "is not recursively mapped to the "
+ "expected clock class: "
+ "stream-class-addr=%p, "
+ "stream-class-name=\"%s\", "
+ "stream-class-id=%" PRId64 ", "
+ "ft-addr=%p",
+ stream_class,
+ bt_stream_class_get_name(stream_class),
+ stream_class->id,
+ stream_class->event_header_type);
+ goto end;
+ }
+
+ ret = bt_validate_single_clock_class(stream_class->event_context_type,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Stream class's event context field type "
+ "is not recursively mapped to the "
+ "expected clock class: "
+ "stream-class-addr=%p, "
+ "stream-class-name=\"%s\", "
+ "stream-class-id=%" PRId64 ", "
+ "ft-addr=%p",
+ stream_class,
+ bt_stream_class_get_name(stream_class),
+ stream_class->id,
+ stream_class->event_context_type);
+ goto end;
+ }
+
+ for (i = 0; i < stream_class->event_classes->len; i++) {
+ struct bt_event_class *event_class =
+ g_ptr_array_index(stream_class->event_classes, i);
+
+ assert(event_class);
+ ret = bt_event_class_validate_single_clock_class(event_class,
+ expected_clock_class);
+ if (ret) {
+ BT_LOGW("Stream class's event class contains a "
+ "field type which is not recursively mapped to "
+ "the expected clock class: "
+ "stream-class-addr=%p, "
+ "stream-class-name=\"%s\", "
+ "stream-class-id=%" PRId64,
+ stream_class,
+ bt_stream_class_get_name(stream_class),
+ stream_class->id);
+ goto end;
+ }
+ }
+
+end:
+ return ret;
+}